Java集合主要分为两种类型:Collection 和 Map。
一、Collection 接口
Collection 是一个单列集合,用于存储一组元素,不包含重复的键值对,但可以包含重复的元素(取决于具体的子接口)。常见的实现类包括:
1.List:
- 特性:有序集合,允许重复元素。维护插入顺序。
- 实现类:
ArrayList:基于动态数组实现,查询效率高,增删操作效率较低。
LinkedList:基于双向链表实现,增删操作效率高,查询效率较低。
Vector:线程安全的动态数组,性能较慢。
- 优点:有序,支持快速随机访问。
- 缺点:插入和删除元素可能影响性能。
2.Set:
- 特性:无序集合,不允许重复元素。
- 实现类:
HashSet:基于哈希表实现,查找效率高。
LinkedHashSet:保留插入顺序的哈希表。
TreeSet:基于红黑树实现,保持自然排序顺序或自定义比较器顺序。
- 优点:快速查找和唯一性。
- 缺点:无序性可能影响某些应用。
3.Queue:
- 特性:先进先出(FIFO)的集合,通常用于任务队列。
- 实现类:
ArrayDeque:高效双端队列。
LinkedList:可以作为队列使用。
- 优点:高效的插入和删除操作。
- 缺点:与栈结构混用可能导致误用。
二、Map 接口
Map 是一个键值对集合,提供了一种更灵活的数据存储方式。常见的实现类包括:
1.HashMap:
- 特性:基于哈希表实现,非线程安全。
- 优点:快速查找和插入操作。
- 缺点:不保证顺序,且可能有较高的内存消耗。
2.HashTable:
- 特性:线程安全的哈希表实现。
- 优点:适用于多线程环境。
- 缺点:性能较低,已被HashMap(线程安全版本ConcurrentHashMap)逐渐取代。
3.LinkedHashMap:
- 特性:保持插入顺序或最近使用顺序(LRU)。
- 优点:有序性有助于某些缓存场景。
- 缺点:内存消耗较高。
4.TreeMap:
- 特性:基于红黑树实现,键按自然顺序排序。
- 优点:有序查找和插入。
- 缺点:性能稍逊于HashMap,但适合需要排序的场景。
5.WeakHashMap:
- 特性:键使用弱引用,适用于内存敏感的环境。
- 优点:避免内存泄漏。
- 缺点:维护较困难,需特别处理键的存在性。
三、选择合适的集合
- List vs Set:当需要有序且允许重复元素时选List;否则选Set以保证唯一性和无序性。
- ArrayList vs LinkedList:随机访问频繁时用ArrayList,插入删除频繁且顺序不重要的场合用LinkedList。
- HashMap vs TreeMap:快速查找和无序操作选HashMap;有序键值对选TreeMap。
- 线程安全性:多线程环境使用ConcurrentHashMap或CopyOnWriteArraySet等高并发集合。
四、使用示例
1. 使用ArrayList
List list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
// 遍历元素
for (String str : list) {
System.out.println(str);
}
2. 使用HashSet
Set set = new HashSet<>();
set.add(1);
set.add(2);
// 检查是否存在
if (set.contains(3)) {
// 处理不存在的情况
} else {
set.add(3);
}
3. 使用HashMap
Map map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
// 获取值
Integer value = map.get("A");
System.out.println(value);
五、性能优化
- 避免过度泛型化:使用无界的集合可能会影响性能,但现代JVM的处理较好。
- 选择合适的数据结构:根据需求选择List或Set,线程安全与否。
- 利用工具类:如Collections.sort()对集合进行排序,或使用数据流Stream提高操作效率。
本文暂时没有评论,来添加一个吧(●'◡'●)