ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/2f/45/2f459861d963c59dddd56d7466da4381_643x611.png) **1. AbstractCollection** (1)实现了大部分的集合接口。 **2. AbstractList** (1)继承于AbstractCollection,并且实现了大部分List接口。 **3. AbstractSequentialList** (1)继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。 <br/> **4. LinkedList** (1)实现了List接口,主要用于创建链表存储结构。 (2)无序;允许重复;允许存储null值。 (3)线程不安全,效率高。 (4)如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。 ```java List list = Collections.synchronizedList(new LinkedList(...)); ``` (5)底层数据结构是双向链表,查询慢,增删快。 **5. ArrayList** (1)实现了List接口。 (2)有序,插入顺序便是存储顺序;允许重复;允许存储多个null值。 (3)ArrayList 默认初始容量为10,每次增长当前长度的1.5倍。 (4)底层数据结构是动态数组,查询快,增删慢。 (5)线程不安全,效率高。在多线程的情况下不要使用。 <br/> **6. AbstractSet** (1)继承于AbstractCollection 并且实现了大部分Set接口。 **7. HashSet** (1)实现了Set接口。 (2)无序,但遍历的顺序是固定的;元素唯一;允许存储一个null值。 (3)去重原理:根据hashCode()获取哈希值,根据equals方法判断哈希值是否相等,equals返回false,则元素添加到集合中。 (4)底层原理:使用HashMap实现,就是HashMap中的K,而V统一存储为Object的对象。 (3)底层数据结构是哈希表。 **8. LinkedHashSet** (1)继承HashSet,实现了Set接口。 (2)底层原理:使用LinkedHashMap实现,根据元素的hashcode来决定元素真正的存储位置,同时再使用一个链表维护元素的次序,遍历的时候,看起来像是以插入顺序排布的,实际并不是。 (3)底层数据结构是哈希表+链接。 **9. TreeSet** (1)该类实现了Set接口,可以实现排序等功能。 (2)有序;元素唯一;不允许存储null值,否则抛出异常。 (3)去重原理:能够存储到TreeSet的元素都实现了Comparable接口,如果元素的compareTo方法返回0则是重复的,否则不是重复的。 (4)排序原理:根据compareTo方法的返回结果进行排序。如果采用默认的compareTo则称为自然排序;如果我们重写compareTo,则称为定制排序。 (5)线程不安全,效率高。 (6)底层原理:使用TreeMap实现。 (7)底层数据结构是红黑树。 <br/> **10. AbstractMap** (1)实现了大部分的Map接口。 **11. HashMap** (1)实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度。 (2)HashMap存储的内容是键值对(key-value)映射。 (3)允许 null 为键,但是必须是唯一的;可以存储 null 值。 (4)底层数据结构,在jdk1.7为数组+哈希表,在jdk1.8+中是数组+哈希表+红黑树。 (5)当链表长度超过阈值(8)时,将哈希表转换为红黑树,这样大大减少了查找时间。 (6)线程不安全,效率高。 **12. TreeMap** (1)继承AbstractMap。 (2)存储的是有序的K-V集合,根据K进行排序。 (3)不允许 null 为键,否则抛出NullPointerException;可以存储 null 值。 (4)排序原理:能够作为TreeMap的键,则该键一定实现了Comparable接口,根据接口的compareTo返回结果进行排序。 (5)底层数据结构是红黑树。 **13. WeakHashMap** (1)继承AbstractMap类,使用弱密钥的哈希表。 **14. LinkedHashMap** (1)继承于HashMap,使用元素的自然顺序对元素进行排序。 **15. IdentityHashMap** (1)继承AbstractMap类,比较文档时使用引用相等。