当前位置: 首页 > news >正文

Java的Collection 集合体系详解

在 Java 开发中,集合框架是处理数据容器的核心工具。它提供了一系列接口和类,帮助我们高效地存储、操作和管理对象集合。本文将聚焦Collection 集合体系,深入解析其核心接口与实现类。

一、集合框架概述

Java 集合框架主要分为两大体系:

  • Collection 体系:存储单个元素的集合,包括 List(有序可重复)、Set(无序不可重复)、Queue(队列)。
  • Map 体系:存储 ** 键值对(Key-Value)** 的集合,如 HashMap、TreeMap 等。

今天我们先深入学习Collection 体系

二、Collection 接口:集合的根接口

java.util.Collection是所有单列集合的根接口,它定义了集合的通用行为,包括增删改查、遍历等操作。

1. Collection 常用方法

public class CollectionDemo {public static void main(String[] args) {Collection<String> coll = new ArrayList<>();// 添加元素coll.add("Java");coll.add("Python");coll.add("C++");// 判断是否包含元素System.out.println(coll.contains("Java")); // true// 删除元素coll.remove("C++");// 元素个数System.out.println(coll.size()); // 2// 转数组Object[] arr = coll.toArray();for (Object o : arr) {System.out.println(o);}// 清空集合coll.clear();System.out.println(coll.isEmpty()); // true}
}

三、List 接口:有序可重复的集合

List接口继承自Collection,特点是元素有序、可重复,且支持通过索引操作元素。常用实现类有ArrayListLinkedListVector

1. ArrayList:基于数组的动态列表

  • 底层结构:数组,查询快(随机访问)、增删慢(需移动元素)。
  • 适用场景:读多写少的场景。
public class ArrayListDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");// 按索引访问System.out.println(list.get(1)); // Banana// 按索引修改list.set(1, "Grape");System.out.println(list); // [Apple, Grape, Cherry]// 插入元素list.add(1, "Pear");System.out.println(list); // [Apple, Pear, Grape, Cherry]}
}

2. LinkedList:基于链表的双向列表

  • 底层结构:双向链表,查询慢(需遍历)、增删快(只需修改指针)。
  • 额外功能:实现了Deque接口,支持队列、栈的操作(如pushpopofferpoll)。
public class LinkedListDemo {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("A");list.add("B");list.add("C");// 栈操作(先进后出)list.push("Top");System.out.println(list.pop()); // Top// 队列操作(先进先出)list.offer("Last");System.out.println(list.poll()); // A}
}

3. Vector:线程安全的动态列表(已过时)

  • 特点:方法加了synchronized锁,线程安全但性能低。
  • 替代方案:优先用ArrayList,多线程场景可结合Collections.synchronizedList()

四、Set 接口:无序不可重复的集合

Set接口继承自Collection,特点是元素无序、不可重复(通过equals()hashCode()保证唯一性)。常用实现类有HashSetLinkedHashSetTreeSet

1. HashSet:基于哈希表的 Set

  • 底层结构:哈希表(数组 + 链表 / 红黑树),元素无序、唯一。
  • 去重原理:先比较hashCode,再比较equals()
public class HashSetDemo {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Java");set.add("Java"); // 重复元素,添加失败set.add("Python");System.out.println(set); // [Python, Java](无序)}
}

2. LinkedHashSet:有序的 HashSet

  • 底层结构:哈希表 + 链表,元素有序(插入顺序)、唯一
  • 适用场景:需要保证插入顺序的去重场景。
public class LinkedHashSetDemo {public static void main(String[] args) {Set<String> set = new LinkedHashSet<>();set.add("A");set.add("B");set.add("A");System.out.println(set); // [A, B](保持插入顺序)}
}

3. TreeSet:可排序的 Set

  • 底层结构:红黑树,元素可排序(自然排序或自定义比较器)、唯一
  • 排序方式:元素需实现Comparable接口,或创建TreeSet时传入Comparator
public class TreeSetDemo {public static void main(String[] args) {// 自然排序(Integer实现了Comparable)Set<Integer> set = new TreeSet<>();set.add(3);set.add(1);set.add(2);System.out.println(set); // [1, 2, 3](自动排序)// 自定义比较器(降序)Set<String> strSet = new TreeSet<>((s1, s2) -> s2.compareTo(s1));strSet.add("C");strSet.add("A");strSet.add("B");System.out.println(strSet); // [C, B, A]}
}

五、Queue 接口:队列(先进先出)

Queue接口继承自Collection,是 先进先出的队列结构,常用实现类有LinkedList(同时实现了 List 和 Queue)、PriorityQueue(优先队列)。

public class QueueDemo {public static void main(String[] args) {Queue<String> queue = new LinkedList<>();queue.offer("Task1"); // 入队queue.offer("Task2");queue.offer("Task3");System.out.println(queue.poll()); // Task1(出队)System.out.println(queue.peek()); // Task2(查看队首,不出队)System.out.println(queue); // [Task2, Task3]}
}

总结

Collection 体系是 Java 集合的基础,其中:

  • List:有序可重复,选ArrayList(读多写少)或LinkedList(增删多)。
  • Set:无序不可重复,选HashSet(性能优)、LinkedHashSet(需插入顺序)或TreeSet(需排序)。
  • Queue:先进先出,选LinkedListPriorityQueue(优先队列)。
http://www.dtcms.com/a/511534.html

相关文章:

  • 无速度传感器交流电机的扩展Luenberger观测器
  • 营销型网站建设公司网络推广正邦设计有限公司
  • Day7C语言前期阶段算法之选择排序
  • 测试计划包含哪些内容?
  • 白描OCR文案识别
  • 企业 宣传 还要网站吗dxc采集wordpress插件
  • PCIe协议之 LTSSM状态机篇 之 关于链路宽度改变的图示讲解(一)Autonomous Change
  • 建设学校网站策划书网站即将上线 模板
  • [人工智能-大模型-30]:大模型应用层技术栈 - 上下文增强层:谁掌握了更高效、更精准的上下文增强能力,谁就能构建出真正有价值的智能系统。
  • ATAM,SAAM,DSSA详解(系统架构)
  • 软考高级-系统架构设计师案例专题三:系统开发基础
  • 实模式下的地址分段
  • clickhouse 检查是否有删除语句在执行
  • 网站职能怎么将自己的视频推广出去
  • ubuntu22.04 ros2 kobuki底盘控制全纪录
  • 深圳网站建设外贸公司做单抗药的看什么网站好
  • 植物大战僵尸杂交版v3.12最新版本(附下载链接)
  • 云手机的安全保护措施有哪些?
  • 计算机毕业设计240—基于python+爬虫+html的微博舆情数据可视化系统(源代码+数据库)
  • 制作梦核的网站做h网站
  • 本地部署开源数据分析平台 Elastic Stack 并实现外部访问( Windows 版本)
  • 高性能组件_线程内存redis_Mysql_内存序_malloc
  • 2025年前端技术全景指南:从基础到架构的实战手册
  • RuoYi/ExcelUtil修改(导入excel表时,表中字段没有映射上数据库表字段)
  • C++ 分治 快排铺垫 三指针 力扣 75.颜色分类 题解 每日一题
  • 预测算法:股票数据分析预测系统 股票预测 股价预测 Arima预测算法(时间序列预测算法) Flask 框架 大数据(源码)✅
  • 门户网站需要多少空间如何引流被动加好友微信
  • 网站的 联系我们怎么做关键词优化难易
  • 【Java】基于 Tabula 的 PDF 合并单元格内容提取
  • Android 系统的进程模型