java collection集合特点知识点详解
在 Java 中,Collection 是所有集合类的根接口,它定义了一组对象的基本操作。Java 集合框架提供了丰富的实现类(如List、Set、Queue),具有以下核心特点:
一、统一的接口设计
1. 核心接口层次
Collection (根接口)
├── List (有序可重复)
├── Set (无序不重复)
└── Queue (队列,FIFO) 
List:元素有序、可重复,支持索引访问(如ArrayList、LinkedList)。Set:元素无序、唯一(如HashSet、TreeSet)。Queue:遵循先进先出(FIFO)原则(如LinkedList、PriorityQueue)。
2. 共性方法
所有Collection实现类都支持以下操作:
add(E e);        // 添加元素
remove(Object o);// 移除元素
contains(Object o); // 判断是否包含
size();         // 返回元素数量
isEmpty();      // 判断是否为空
clear();        // 清空集合
iterator();     // 获取迭代器
toArray();      // 转换为数组 
二、动态扩容机制
- 自动调整大小:大部分集合类(如
ArrayList、HashMap)会在元素数量超过容量时自动扩容。 - 扩容策略: 
ArrayList:初始容量为 10,扩容时新容量 = 旧容量 × 1.5。HashMap:初始容量为 16,负载因子 0.75,扩容时新容量 = 旧容量 × 2。
 
三、线程安全与非线程安全
1. 非线程安全实现
ArrayList、HashSet、HashMap等:性能高,但不支持多线程并发访问。
List<String> list = new ArrayList<>(); // 非线程安全 
2. 线程安全实现
Vector、Hashtable:早期线程安全类,通过synchronized实现,性能较低。Collections.synchronizedXXX():将非线程安全集合转换为线程安全集合。
List<String> syncList = Collections.synchronizedList(new ArrayList<>()); 
java.util.concurrent包:CopyOnWriteArrayList、ConcurrentHashMap:高效的线程安全集合,采用写时复制或分段锁机制。
四、高效的迭代与遍历
1. 迭代器(Iterator)
 
- 所有集合都支持通过
iterator()方法获取迭代器,实现统一遍历。 
Iterator<String> it = list.iterator();
while (it.hasNext()) {System.out.println(it.next());
} 
2. for-each 循环
 
- 语法糖,底层依赖迭代器实现。
 
for (String element : list) {System.out.println(element);
} 
五、丰富的数据结构实现
1. List 的实现类
 
ArrayList:基于动态数组,随机访问快(O (1)),插入 / 删除慢(O (n))。LinkedList:基于双向链表,插入 / 删除快(O (1)),随机访问慢(O (n))。
2. Set 的实现类
 
HashSet:基于哈希表,无序,元素唯一。TreeSet:基于红黑树,有序(自然排序或自定义排序)。LinkedHashSet:基于哈希表 + 链表,保持插入顺序。
3. Map 的实现类
 
HashMap:键值对存储,无序,允许null键和null值。TreeMap:基于红黑树,按键有序。LinkedHashMap:保持插入顺序或访问顺序。
六、泛型支持
- 类型安全:Java 5 引入泛型后,集合可以指定存储的元素类型。
 
List<String> list = new ArrayList<>(); // 只能存储String类型
list.add("Java");
// list.add(123); // 编译错误 
七、与数组的互操作性
- 集合转数组:通过
toArray()方法。 
List<String> list = Arrays.asList("A", "B", "C");
String[] array = list.toArray(new String[0]); 
数组转集合:通过Arrays.asList()方法。
String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array); 
八、性能特点对比
| 操作 | ArrayList | LinkedList | HashSet | TreeSet | 
|---|---|---|---|---|
| 随机访问 | O(1) | O(n) | - | - | 
| 插入 / 删除尾部 | O(1) | O(1) | O(1) | O(log n) | 
| 插入 / 删除中间 | O(n) | O(1) | - | - | 
| 查找元素 | O(n) | O(n) | O(1) | O(log n) | 
九、常见注意事项
-  
null值处理:ArrayList、HashMap允许存储null,而TreeSet、TreeMap不允许(因依赖比较器)。
 -  
equals()和hashCode():- 若元素需存储在
HashSet或HashMap中,必须正确重写equals()和hashCode()方法。 
 - 若元素需存储在
 -  
fail-fast 机制:
- 当集合在迭代过程中被修改时,会抛出
ConcurrentModificationException。 
 - 当集合在迭代过程中被修改时,会抛出
 
Java 集合框架通过统一接口、丰富实现和高效算法,为开发者提供了灵活且高性能的数据结构选择,适用于各种场景。合理选择集合类型(如ArrayList vs LinkedList、HashMap vs TreeMap)是优化代码性能的关键。
