JAVA集合主要分为三种类型:Set(集), List(列表), Map(映射)
Set集合:集合元素是不能重复的,元素是没有顺序的,所以它不能基于位置访问元素。
List集合: 集合元素是可以重复的,元素是有顺序的,所以它可以基于位置访问元素。
Map:它包含键值对。Map的键是不能重复的,可以保证元素的插入顺序,也可以排序。
集合名称 | 底层 | 扩容机制 | 线程安全 | 备注 |
---|---|---|---|---|
ArrayList | 数组 | 1.5倍 | 线程不安全 | 查询快,增删慢 |
LinkedList | 双向链表 | 无 | 线程不安全 | 增删快,查询慢 |
Vector | 数组 | 2倍 | 线程安全 |
Vector底层: Java集合 Vector的底层详解_java vector底层_Dre丿的博客-CSDN博客
注:在多线程环境中,可以使用线程安全的集合类,比如Vector或者CopyOnWriteArrayList
集合名称 | 底层 | 扩容机制 | 线程安全 | 备注 |
---|---|---|---|---|
HashSet | 哈希表 | 2倍 | 线程不安全 | 底层就是 HashMap |
LinkedHashSet | 哈希表+链表 | 无 | 线程不安全 | |
TreeSet | 树 | 无 | 线程不安全 |
TreeSet相关:LinkedHashSet和TreeSet_linkedhashset treeset_jtjeeeee的博客-CSDN博客
集合名称 | 底层 | 扩容机制 | 线程安全 | 备注 |
---|---|---|---|---|
HashMap | 数组+链表+红黑树(jdk1.8) | 2倍 | 线程不安全 | |
LinkedHashMap | 继承HashMap | 无 | 线程不安全 | |
TreeMap | 红黑树 | 无 | 线程不安全 | |
Hashtable | 数组+链表 | 2倍 +1 | 线程安全 |
注:HashMap当链表长度超过8时,此时会继续判断哈希表的长度如果大于等于64,就会将链表转换为红黑树,提高查询的效率。