java集合类详解(适合小白)
1. Collection 接口
Collection是所有集合的根接口,主要有以下子接口:
List(有序集合)
-
ArrayList:基于数组实现,查询快,增删慢
-
LinkedList:基于双向链表实现,增删快,查询慢
-
Vector:线程安全的ArrayList(已过时)
// List使用示例 List<String> list = new ArrayList<>(); list.add("张三"); list.add("李四"); list.get(0); // 获取第一个元素
Set(不允许重复元素)
-
HashSet:基于HashMap实现,无序
-
TreeSet:基于红黑树实现,有序
-
LinkedHashSet:维护插入顺序
// Set使用示例 Set<String> set = new HashSet<>(); set.add("苹果"); set.add("香蕉"); set.add("苹果"); // 重复元素不会被添加
2. Map 接口
Map用于存储键值对,主要实现类:
- HashMap:最常用的Map实现,非线程安全
- TreeMap:基于红黑树,按键排序
- LinkedHashMap:维护插入顺序
- Hashtable:线程安全(已过时)
// HashMap使用示例
HashMap<String, Integer> map = new HashMap<>();
map.put("苹果", 5);
map.put("香蕉", 3);
map.put("橙子", 4);
3. 常用方法
Collection接口常用方法
- add(E e): 添加元素
- remove(Object o): 删除元素
- contains(Object o): 判断是否包含元素
- size(): 获取集合大小
- isEmpty(): 判断是否为空
- clear(): 清空集合
Map接口常用方法
- put(K key, V value): 添加键值对
- get(Object key): 获取值
- remove(Object key): 删除键值对
- containsKey(Object key): 判断是否包含键
- containsValue(Object value): 判断是否包含值
4. 线程安全的集合
Java提供了线程安全的集合类:
// 线程安全的List
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
// 线程安全的Set
Set<String> syncSet = Collections.synchronizedSet(new HashSet<>());
// 线程安全的Map
Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
// 更现代的线程安全集合
List<String> concurrentList = new CopyOnWriteArrayList<>();
Set<String> concurrentSet = new ConcurrentSkipListSet<>();
Map<String, String> concurrentMap = new ConcurrentHashMap<>();
5. 集合的遍历
// 1. for-each循环
for (String item : list) {
System.out.println(item);
}
// 2. Iterator迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
}
// 3. Map的遍历
Map<String, Integer> map = new HashMap<>();
// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
迭代器流程图:
6. 注意事项
- 选择合适的集合类型:
- 需要有序列表用ArrayList
- 频繁增删用LinkedList
- 需要唯一性用Set
- 需要键值对用Map
- 线程安全考虑:
- 单线程环境使用普通集合类
- 多线程环境使用线程安全的集合类
- 性能考虑:
- 初始容量设置合理
- 避免频繁扩容
- 选择合适的集合类型