Map接口:存储“键-值”对的数据 ----相当于高中的“函数y = f(x)” (x1,y1) (x2,y2)
>key是不可重复的,使用Set存,value可以重复的,使用Collection来存放的,一个key-value对构成一个entry(Map.Entry),entry使用Set来存放。
map结构梳理:
map--hashMap:底层结构是数组+链表的形式(它先将key进行hash算法获取到数组的下标位置,然后将数据存放,如果该位置有数据就添加一个链表,存放新加入的数据放在链头,当链表足够长时,就形成了红黑树)。可以添加null键。
--linkedHashMap:底层机构是hash表和链表;其hash表的用法和hashMap一样,他会调用父类的构造方法,只是重写了父类的addEntry和createEntry方法,记录了前后元素的索引,形成链表。可以添加null键。
--treeMap:底层结构是红黑树(自平衡二叉树,是一种数据结构,利用数据的操作),它的key需要自己排序(自然排序,定制排序)。不可以添加null键。
--hashTable:它的底层结构和hashMap一样,只不过它是线程安全的。不允许有null键的发生。
--AbstractMap:
--currentHashMap:它的特点是可以异步进行查询和更改操作,因为它的底层实现采用了分段锁,将hash表的每个段都采用了不同的锁,而每个段都是一个hashtable。不可以添加null键。
collection结构梳理:
list--arraylist:底层结构是数组,查询快,增删慢,扩容时是将老数组中的数据复制到新数组中。线程不安全,并发采用的是快速失败方式。
--LinkedList:底层结构是双向链表,查询慢,增删快。线程不安全,并发采用的是快速失败方式。
--Vector(古老的实现类、线程安全的,但效率要低于ArrayList)底层结构是数组,查询快,增删慢,扩容时是将老数组中的数据复制到新数组中。
set--hashSet: 底层结构是hash表,它的底层代码主要是依赖hashmap来实现的,它的api也是根据hashmap进行封装的。
--linkedHashSet:底层结构是双向链表和hash表,它是hashset的子类,实现方式主要依赖与linkedhashmap。
--treeSet: 底层结构是红黑树,根据treemap实现。