与数组相比:只能引用类型,长度可变,方法多
类别 | 接口 | 实现类 | 存储方式 | 有序性 | 线程安全性 | 特点 |
---|---|---|---|---|---|---|
单列集合Collection | List | ArrayList | 动态数组 | 有序 | 否 | 允许快速随机访问,增删效率低 |
LinkedList | 双向链表 | 有序 | 否 | 增删操作效率高,随机访问较慢 | ||
Vector(弃用) | 动态数组 | 有序 | 是 | 与ArrayList类似,但线程安全 | ||
Stack | 动态数组 | 有序 | 是 | 后进先出(LIFO)的栈 | ||
Set | HashSet | 哈希表 | 无序 | 否 | 不允许重复元素 | |
LinkedHashSet | 哈希表+链表 | 有序 | 否 | 插入顺序访问,较HashSet稍慢 | ||
TreeSet | 红黑树 | 有序 | 否 | 基于元素的自然顺序或自定义顺序 | ||
Queue | PriorityQueue | 二叉堆 | 无序 | 否 | 元素按自然顺序或自定义顺序出队 | |
ArrayDeque | 动态数组 | 有序 | 否 | 双端队列 | ||
双列集合 | Map | HashMap | 哈希表 | 无序 | 否 | 允许null键和null值 |
LinkedHashMap | 哈希表+链表 | 有序 | 否 | 按插入顺序访问 | ||
TreeMap | 红黑树 | 有序 | 否 | 基于键的自然顺序或自定义顺序 | ||
Hashtable | 哈希表 | 无序 | 是 | 线程安全,不允许null键和null值 | ||
Concurrent HashMap | 分段锁哈希表 | 无序 | 是 | 高并发环境下效率高 | ||
特殊集合 | EnumSet | 无 | 位向量 | 有序 | 否 | 专为枚举类型设计 |
EnumMap | 无 | 数组 | 有序 | 否 | 键为枚举类型 | |
Weak HashMap | 无 | 哈希表 | 无序 | 否 | 使用弱引用的键,方便垃圾回收 | |
Identity HashMap | 无 | 哈希表 | 无序 | 否 | 基于引用相等性比较键 |
集合和数组的区别
-
共同点: 都是用于存储数据的容器
-
不同点:
-
存储内容的不同:
-
数组既可以存储基本类型,也可以存储引用类型
-
集合只能存储引用类型
-
-
存储数量的不同:
-
数组的长度不可变,一旦确定大小就无法改变
-
集合的长度可变,是一个可以伸缩的容器
-
-
方法不同:
-
数组中只有Object中定义的方法,以及有一个length属性
-
集合中可以有很多方法,很丰富
-
-