# Java常见集合类
# 简要回答
Collection接口(单列集合):- 单列集合用于存储单个元素。
- 主要的子接口包括:
①List:它的特点是“有序、可重复”。List接口的常见实现类有:ArrayList,Vector和LinkedList。
②Set:Set集合的特点是“无序、不可重复”。Set接口的常见实现类有:HashSet,TreeSet。
③Queue:队列,它的特点是先进先出(FIFO)。Queue接口的常见实现类有:PriorityQueue。
Map接口(双列集合):- 用于存储键值对(Key-Value Pair)。特点是“键(Key)唯一,值(Value)可重复”。
- Map接口的常见实现类有::
HashMap,Hashtable,TreeMap。
# 详细回答
# Collection 接口(单列集合)
- 定义:
Collection是所有单列集合的根接口,用于存储一系列不重复或重复的单个元素。它定义了所有单列集合的通用行为,如添加、删除、判断元素是否存在等。 - 分类:
List接口:
Δ 特点:元素有序(按插入顺序),元素可重复。可以通过索引访问元素。
Δ 常见的实现类:
①ArrayList:底层基于动态数组实现。特点是查询(随机访问)速度快,因为可以通过索引直接定位;但增删元素(特别是中间位置)效率相对较低,因为可能会涉及到大量元素的移动。ArrayList类是非线程安全的。
②LinkedList:底层基于双向链表实现。特点是增删元素(特别是首尾和中间位置)效率高,因为只需修改结点指针;但查询(随机访问)效率较低,因为需要从头或尾遍历。LinkedList也是非线程安全的。
③Vector:Vector类与ArrayList类似,但它是线程安全的(方法都加了synchronized关键字)。但由于同步开销,其性能通常低于ArrayList。Set接口:
Δ 特点:元素无序(不保证插入顺序),元素不可重复(通过hashCode()和equals()方法判断)。
Δ 常见的实现类:
①HashSet:底层其实是HashMap。特点是增删改查效率高,但元素无序。HashSet是非线程安全的。
②LinkedHashSet:继承自HashSet,底层基于哈希表和链表实现。它在HashSet的基础上,通过链表维护了元素的插入顺序。LinkedHashSet也是非线程安全的。
③TreeSet:底层基于红黑树实现。TreeSet类的特点是元素有序(按自然排序或自定义比较器排序),增删改查效率相对HashSet略低(对数时间复杂度)。TreeSet也是非线程安全的。Queue接口:
Δ 特点 :遵循 先进先出(FIFO) 原则,常用于模拟队列数据结构。
Δ 常见的实现类 :
①PriorityQueue:优先级队列,元素根据其自然排序或自定义比较器进行排序,每次取出的是优先级最高的元素。PriorityQueue是非线程安全的。
# Map 接口(双列集合)
- 特点:
- 键(Key)是唯一的,用于快速查找对应的值。
- 值(Value)可以重复。
- 一个键最多映射一个值。
- 常见的实现类:
HashMap:底层基于哈希表实现。它的特点是查询、增删效率高,但元素(键值对)无序。HashMap是非线程安全的。LinkedHashMap:继承自HashMap,底层基于哈希表 和 双向链表实现。它在HashMap的基础上,通过链表维护了键值对的插入顺序。LinkedHashMap是非线程安全的。TreeMap:底层基于红黑树实现。它的特点是键值对有序(按键的自然排序或自定义比较器排序),增删改查效率相对HashMap略低。TreeMap是非线程安全的。Hashtable:与HashMap类似,但它是线程安全的(方法都加了synchronized关键字),性能较低,是 Java 早期版本提供的集合类。Hashtable的键和值都不能为null。ConcurrentHashMap:在JDK1.5之后提供的线程安全且高性能的双列集合实现。它通过分段锁(JDK7)或CAS + synchronized(JDK8)等机制,提供了比Hashtable更好的并发性能。
# 知识拓展
# 图解
- Java集合类的选择策略示意图如下:

# 集合与数组的区别:
- 元素类型:
- 集合:只能存储引用类型。当存储基本类型时,会自动进行装箱(Autoboxing)转换为对应的包装类。
- 数组:既可以存储基本类型,也可以存储引用类型。但一个数组中不能混用基本类型和引用类型(即数组的元素类型是固定的)。
- 元素个数(长度):
- 集合:不固定。集合的容量可以根据需要动态地进行扩容或缩减,可以随时添加或删除元素。
- 数组:固定。数组的长度一旦指定,在创建后就不能再更改。如果需要改变数组长度,只能创建新数组并复制旧数组的元素。
# 集合的好处:
- 动态容量:集合不受容器大小限制,可以随时添加或删除元素,可以动态地保存任意多个对象,无需预先指定大小。这使得集合在处理不确定数量数据时非常灵活。
- 丰富操作:集合提供了大量操作元素的方法(例如
add(),remove(),contains(),size(),isEmpty()等),以及各种遍历方式(迭代器、增强for循环、Stream API),使得数据的操作和管理更加高效。
评论
验证登录状态...