java Collections 详解

ops/2024/11/17 9:21:39/

Java Collections Framework (集合框架) 详解

Java 集合框架 (Java Collections Framework, JCF) 是一套功能强大且灵活的工具,用于存储和处理一组对象。集合框架为各种数据结构提供了标准实现,如列表 (List)集合 (Set)映射 (Map),极大地简化了数据操作任务。


1. 集合框架的结构

Java 集合框架主要包含以下几个核心接口:

  • Collection:集合的根接口,包含基本操作和特性,子接口包括 ListSetQueue
  • Map:映射接口,用于存储键-值对。
集合框架的层次结构
                Collection|---------------------------------|               |               |List            Set             Queue|               |               |ArrayList      HashSet        PriorityQueueLinkedList     LinkedHashSet  ArrayDequeVector         TreeSet
                   Map|--------------------------------|                              |HashMap                       SortedMapLinkedHashMap                 TreeMapWeakHashMapIdentityHashMap

2. 主要接口及其实现

2.1 List 接口

List 接口表示一个有序的集合,允许重复元素。List 可以通过索引访问元素。

  • 主要实现类
    • ArrayList
      • 基于动态数组,访问速度快,插入和删除效率相对较低。
      • 适合随机访问场景。
    • LinkedList
      • 基于双向链表,插入和删除效率高,但访问速度较慢。
      • 适合频繁插入、删除操作的场景。
    • Vector
      • 线程安全的动态数组,类似 ArrayList,但性能较低。

示例

java">List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
System.out.println(list.get(1)); // 输出: B

2.2 Set 接口

Set 接口表示一个无序集合,不允许重复元素。

  • 主要实现类
    • HashSet
      • 基于哈希表实现,不保证元素的顺序。
      • 插入、删除和查找操作的效率高。
    • LinkedHashSet
      • 保持插入顺序的 HashSet,基于链表和哈希表实现。
    • TreeSet
      • 基于红黑树实现,元素有序,支持排序操作。

示例

java">Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 重复元素不会被添加
System.out.println(set); // 输出: [A, B]

2.3 Queue 接口

Queue 接口表示一个队列,通常遵循“先入先出” (FIFO) 原则。

  • 主要实现类
    • PriorityQueue
      • 基于优先级堆实现,元素按自然顺序或自定义比较器排序。
    • ArrayDeque
      • 双端队列,允许在两端插入和删除元素,效率高于 LinkedList

示例

java">Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.poll(); // 移除并返回队首元素
System.out.println(queue); // 输出: [2]

2.4 Map 接口

Map 接口表示一个键值对集合,每个键最多只能映射到一个值。

  • 主要实现类
    • HashMap
      • 基于哈希表实现,不保证顺序,允许 null 键和值。
      • 适合插入、删除和查找操作。
    • LinkedHashMap
      • 保持插入顺序的 HashMap,使用链表维护顺序。
    • TreeMap
      • 基于红黑树实现,键按自然顺序或自定义顺序排序。
    • WeakHashMap
      • 使用弱引用的哈希表,便于垃圾回收。
    • IdentityHashMap
      • 使用 == 比较键的哈希表,而不是 equals() 方法。

示例

java">Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map.get("A")); // 输出: 1

3. 常用方法

3.1 List 接口的方法
  • add(E e): 添加元素到列表末尾。
  • get(int index): 获取指定索引的元素。
  • remove(int index): 移除指定索引的元素。
  • set(int index, E element): 替换指定索引的元素。
  • size(): 返回列表的大小。
3.2 Set 接口的方法
  • add(E e): 添加元素,如果已存在,则不添加。
  • remove(Object o): 移除指定元素。
  • contains(Object o): 检查集合是否包含某元素。
  • size(): 返回集合的大小。
3.3 Queue 接口的方法
  • offer(E e): 添加元素到队列尾部。
  • poll(): 移除并返回队首元素,若队列为空则返回 null
  • peek(): 返回队首元素但不移除,若队列为空则返回 null
3.4 Map 接口的方法
  • put(K key, V value): 添加键值对。
  • get(Object key): 获取指定键的值。
  • remove(Object key): 移除指定键的键值对。
  • containsKey(Object key): 检查是否包含指定键。
  • keySet(): 返回所有键的集合。
  • values(): 返回所有值的集合。

4. 集合工具类:CollectionsArrays

4.1 Collections 类

Collections 是一个工具类,提供了许多静态方法来操作集合,如排序、搜索、同步化等。

  • Collections.sort(List<T> list): 对列表进行排序。
  • Collections.shuffle(List<?> list): 随机打乱列表中的元素。
  • Collections.max(Collection<? extends T> coll): 返回集合中的最大元素。
  • Collections.min(Collection<? extends T> coll): 返回集合中的最小元素。

示例

java">List<Integer> numbers = Arrays.asList(5, 2, 8, 1);
Collections.sort(numbers);
System.out.println(numbers); // 输出: [1, 2, 5, 8]
4.2 Arrays 类

Arrays 类提供了一些方法来操作数组,如排序、搜索、转换为集合等。

  • Arrays.asList(T... a): 将数组转换为 List
  • Arrays.sort(int[] a): 对数组进行排序。
  • Arrays.binarySearch(int[] a, int key): 使用二分查找法查找元素。

示例

java">int[] arr = {5, 2, 8, 1};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 输出: [1, 2, 5, 8]

5. 线程安全的集合

  • 使用 Collections.synchronizedListsynchronizedSetsynchronizedMap
    • List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>());
  • 使用并发集合类 (在 java.util.concurrent 包中)
    • ConcurrentHashMap:线程安全的 HashMap
    • CopyOnWriteArrayList:线程安全的 ArrayList

6. 迭代集合

6.1 使用 Iterator 迭代

Iterator 是一个用于遍历集合的接口,支持 remove() 方法来安全地移除元素。

示例

java">List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {String item = iterator.next();System.out.println(item);
}
6.2 使用增强型 for 循环

示例

java">for (String item : list) {System.out.println(item);
}

7. 总结与选择指南

  • List:需要有序集合时使用,选择 ArrayList(访问快)或 LinkedList(插入、删除快)。
  • Set:需要无序、不重复集合时使用,选择 HashSet(无序)或 TreeSet(有序)。
  • Queue:需要先进先出的集合时使用,选择 LinkedList
    PriorityQueue
  • Map:需要键值对集合时使用,选择 HashMap(无序)或 TreeMap(有序)。

Java 集合框架为数据处理提供了丰富的工具,理解各个实现类的特性和用法,能帮助你写出高效、简洁的代码。


http://www.ppmy.cn/ops/134383.html

相关文章

免费,WPS Office教育考试专用版

WPS Office教育考试专用版&#xff0c;不仅满足了考试需求&#xff0c;更为教育信息化注入新动力。 https://pan.quark.cn/s/609ef85ae6d4

三周精通FastAPI:41 部署:FastAPI版本和HTTPS概念

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/deployment/versions/ 关于 FastAPI 版本 FastAPI 已在许多应用程序和系统的生产环境中使用。 并且测试覆盖率保持在100%。 但其开发进度仍在快速推进。 经常添加新功能&#xff0c;定期修复错误&#xff0c;并且代码仍…

隧道养护设计系统(源码+文档+部署+讲解)

本文将深入解析“隧道养护设计系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 隧道养护设计系统是一款专业的隧道养护管理软件&#xff0c;旨在通过集成隧道养护的各个关键环节&#xff0c;提高隧道养护的效率和质量。…

《网络硬件设备完全技术宝典》

《网络硬件设备完全技术宝典》 网卡 集线器 交换机 路由器 双绞线 光缆 无线接入点AP 交换机技术与选择策略 冗余链路技术 由于物理链路和网络模块的损坏都将导致网络链路的失败&#xff0c;因此两个设备之间&#xff0c;特别是核心交换机与汇聚交换机之间的单链路…

Python毕业设计选题:基于BS架构的在线学习与推荐系统的设计与实现-django

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 学生信息管理 科目管理 教师管理 公告信息管理 学习资源管理 学习记录管理 摘要 在…

Spring Web MVC

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中。 它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为"Spring MVC". Servlet 是⼀种实现动态⻚⾯的技术. 准确来讲…

python:用 sklearn 构建 K-Means 聚类模型

pip install scikit-learn 或者 直接用 Anaconda3 sklearn 提供了 preprocessing 数据预处理模块、cluster 聚类模型、manifold.TSNE 数据降维模块。 编写 test_sklearn_3.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 构建 K-Means 聚类模型 "&…

MACA-PEG-NHS中PEG链段能够增加修饰后材料的溶解度和稳定性

一、基本信息 英文名称&#xff1a;MACA-PEG-NHS&#xff0c;Methacrylamide-PEG-NHS&#xff0c;MACA PEG NHS ester。 中文名称&#xff1a;甲基丙烯酰胺PEG活性酯&#xff0c;甲基丙烯酰胺聚乙二醇活性酯。 结构&#xff1a;融合了甲基丙烯酸酯&#xff08;MACA&#xff…