Java中的Collection必知必会

Java中的Collection框架是用于存储、管理和操作对象集合的一组接口和类的统称,位于java.util包中。它提供了多种数据结构,使得开发者无需从头实现即可高效处理数据。以下是核心内容:


1. Collection框架的层次结构

  • Collection接口 :所有集合的根接口,定义了基本操作(添加、删除、遍历等)。
    • 子接口 :
      • List :有序、允许重复(如 ArrayList, LinkedList)。
      • Set :无序、不允许重复(如 HashSet, TreeSet)。
      • Queue :队列结构,支持先进先出(FIFO)或优先级排序(如 PriorityQueue)。
    • Map接口 :独立于Collection接口,存储键值对(如 HashMap, TreeMap)。

2. 核心接口与实现类

List(有序可重复)

  • ArrayList:基于动态数组,查询快(O(1)),增删慢(需移动元素)。
  • LinkedList :基于双向链表,增删快(O(1)),查询慢(O(n)),同时实现了Deque接口。
  • Vector :线程安全但性能差,通常用Collections.synchronizedList()替代。

Set(无序不可重复)

  • HashSet:基于哈希表,快速查找(O(1)),无序。
  • LinkedHashSet :维护插入顺序的HashSet。
  • TreeSet :基于红黑树,元素按自然顺序或Comparator排序(O(log n))。

Queue(队列)

  • LinkedList :可作普通队列或双端队列(Deque)。
  • PriorityQueue:元素按优先级排序(小顶堆)。

Map(键值对)

  • HashMap :基于哈希表,允许null键值,非线程安全。
  • LinkedHashMap:维护插入顺序或访问顺序(LRU实现)。
  • TreeMap:基于红黑树,按键排序。
  • ConcurrentHashMap :线程安全的高性能替代(优于Hashtable)。

3. 工具类 Collections

提供静态方法操作或返回集合:

  • 排序 :Collections.sort(list)
  • 同步包装 :Collections.synchronizedList(list)
  • 不可变集合 :Collections.unmodifiableList(list)

4. 关键特性

  • 泛型 :确保类型安全,如 List<String> list = new ArrayList<>();。
  • 迭代器 Iterator :统一遍历集合,支持hasNext(), next(), remove()。
  • 比较器 Comparator :定制排序逻辑,与Comparable接口配合使用。
  • Java 8+ Stream API:链式操作集合(如过滤、映射、归约)。

5. 示例代码

java 复制代码
// List示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
System.out.println(arrayList); // [Java, Python]

// Set示例
Set<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(1); // 重复元素无效
System.out.println(hashSet); // [1]

// Map示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("A", 1);
hashMap.put("B", 2);
System.out.println(hashMap.get("A")); // 1

// 使用Stream API过滤
List<String> languages = Arrays.asList("Java", "Python", "C++");
List<String> filtered = languages.stream()
                                .filter(s -> s.startsWith("J"))
                                .collect(Collectors.toList()); // [Java]

6. 线程安全与并发集合

  • 非线程安全类 :如ArrayList, HashMap,性能高但需自行处理同步。
  • 线程安全替代 :
    • ConcurrentHashMap:分段锁机制,高并发场景优先使用。
    • CopyOnWriteArrayList:写时复制,适合读多写少。
    • 使用Collections.synchronizedXXX()包装非安全集合。

7. 选择集合的建议

  • 随机访问多 → ArrayList
  • 频繁增删 → LinkedList
  • 去重 → HashSet
  • 排序需求 → TreeSet或TreeMap
  • 键值存储 → HashMap
  • 高并发 → ConcurrentHashMap

掌握Collection框架能显著提升代码效率和可维护性,建议结合具体场景灵活选择数据结构。

相关推荐
骇客野人8 分钟前
Java BIO / NIO / AIO 完整详解 + 编程技巧
java·开发语言·nio
霸道流氓气质11 分钟前
OpenTelemetry 入门与实战:Java Agent、Spring Boot Starter与LLM调用追踪示例
java·开发语言·spring boot
m0_5873830016 分钟前
24 小时自助健身房系统软件开发实战指南与案例解析
java·spring boot·spring·系统架构·需求分析
栖凤23 分钟前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python
小师兄吃牛肉23 分钟前
Java 同步系列之 ZooKeeper 分布式锁
java·分布式·java-zookeeper
马剑威(威哥爱编程)36 分钟前
【AI全栈后端12-12】Spring Boot 3.x 到 4.x 迁移实操:Jakarta 11、Jackson 3 与 AI 2.0
java·开发语言·spring boot·后端
Gauss松鼠会37 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
IT研究室44 分钟前
最新计算机毕业设计选题推荐-基于spring boot的心桥·心理健康综合服务平台-网站-文档指导-Java-springboot
java·spring boot·课程设计
Sarvartha1 小时前
Object 类
java·开发语言
知守观1 小时前
feign-core 就在依赖树里,运行时却找不到类:一次 provided scope 引发的启动失败排查
java·spring cloud·maven