java collection集合特点知识点详解

news2025/5/20 10:41:03

在 Java 中,Collection 是所有集合类的根接口,它定义了一组对象的基本操作。Java 集合框架提供了丰富的实现类(如ListSetQueue),具有以下核心特点:

一、统一的接口设计

1. 核心接口层次
Collection (根接口)
├── List (有序可重复)
├── Set (无序不重复)
└── Queue (队列,FIFO)
  • List:元素有序、可重复,支持索引访问(如ArrayListLinkedList)。
  • Set:元素无序、唯一(如HashSetTreeSet)。
  • Queue:遵循先进先出(FIFO)原则(如LinkedListPriorityQueue)。
2. 共性方法

所有Collection实现类都支持以下操作:

add(E e);        // 添加元素
remove(Object o);// 移除元素
contains(Object o); // 判断是否包含
size();         // 返回元素数量
isEmpty();      // 判断是否为空
clear();        // 清空集合
iterator();     // 获取迭代器
toArray();      // 转换为数组

二、动态扩容机制

  • 自动调整大小:大部分集合类(如ArrayListHashMap)会在元素数量超过容量时自动扩容。
  • 扩容策略
    • ArrayList:初始容量为 10,扩容时新容量 = 旧容量 × 1.5。
    • HashMap:初始容量为 16,负载因子 0.75,扩容时新容量 = 旧容量 × 2。

三、线程安全与非线程安全

1. 非线程安全实现
  • ArrayListHashSetHashMap 等:性能高,但不支持多线程并发访问。
List<String> list = new ArrayList<>(); // 非线程安全
2. 线程安全实现
  • VectorHashtable:早期线程安全类,通过synchronized实现,性能较低。
  • Collections.synchronizedXXX():将非线程安全集合转换为线程安全集合。
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
  • java.util.concurrent 包
    • CopyOnWriteArrayListConcurrentHashMap:高效的线程安全集合,采用写时复制或分段锁机制。

四、高效的迭代与遍历

1. 迭代器(Iterator
  • 所有集合都支持通过iterator()方法获取迭代器,实现统一遍历。
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}
2. for-each 循环
  • 语法糖,底层依赖迭代器实现。
for (String element : list) {
    System.out.println(element);
}

五、丰富的数据结构实现

1. List 的实现类
  • ArrayList:基于动态数组,随机访问快(O (1)),插入 / 删除慢(O (n))。
  • LinkedList:基于双向链表,插入 / 删除快(O (1)),随机访问慢(O (n))。
2. Set 的实现类
  • HashSet:基于哈希表,无序,元素唯一。
  • TreeSet:基于红黑树,有序(自然排序或自定义排序)。
  • LinkedHashSet:基于哈希表 + 链表,保持插入顺序。
3. Map 的实现类
  • HashMap:键值对存储,无序,允许null键和null值。
  • TreeMap:基于红黑树,按键有序。
  • LinkedHashMap:保持插入顺序或访问顺序。

六、泛型支持

  • 类型安全:Java 5 引入泛型后,集合可以指定存储的元素类型。
List<String> list = new ArrayList<>(); // 只能存储String类型
list.add("Java");
// list.add(123); // 编译错误

七、与数组的互操作性

  • 集合转数组:通过toArray()方法。
List<String> list = Arrays.asList("A", "B", "C");
String[] array = list.toArray(new String[0]);

数组转集合:通过Arrays.asList()方法。

String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);

八、性能特点对比

操作ArrayListLinkedListHashSetTreeSet
随机访问O(1)O(n)--
插入 / 删除尾部O(1)O(1)O(1)O(log n)
插入 / 删除中间O(n)O(1)--
查找元素O(n)O(n)O(1)O(log n)

九、常见注意事项

  1. null 值处理

    • ArrayListHashMap 允许存储null,而TreeSetTreeMap 不允许(因依赖比较器)。
  2. equals() 和 hashCode()

    • 若元素需存储在HashSetHashMap中,必须正确重写equals()hashCode()方法。
  3. fail-fast 机制

    • 当集合在迭代过程中被修改时,会抛出ConcurrentModificationException

Java 集合框架通过统一接口、丰富实现和高效算法,为开发者提供了灵活且高性能的数据结构选择,适用于各种场景。合理选择集合类型(如ArrayList vs LinkedListHashMap vs TreeMap)是优化代码性能的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2379910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题——考勤信息(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

Go语言测试用例的执行与分析

在软件开发过程中&#xff0c;测试用例是确保代码质量的关键环节。Go语言作为一种现代的编程语言&#xff0c;它内置了强大的测试框架&#xff0c;可以帮助开发者轻松编写和执行测试用例。本文将介绍如何在 Go 语言中编写、执行测试用例&#xff0c;并对测试结果进行分析。 ## …

MyBatis:动态SQL

文章目录 动态SQLif标签trim标签where标签set标签foreach标签include标签和sql标签 Mybatis动态SQL的官方文档&#xff1a; https://mybatis.net.cn/dynamic-sql.html 动态SQL 动态SQL是 MyBatis的强大特性之一,如果是使用JDBC根据不同条件拼接sql很麻烦&#xff0c;例如拼接…

游戏引擎学习第280天:精简化的流式实体sim

回顾并为今天的内容做铺垫 今天的任务是让之前关于实体存储方式的改动真正运行起来。我们现在希望让实体系统变得更加真实和实用&#xff0c;能够支撑我们游戏实际所需的功能。这就要求我们对它进行更合理的实现和调试。 昨天我们基本让代码编译通过了&#xff0c;但实际上还…

王树森推荐系统公开课 排序03:预估分数融合

融合预估分数 p c l i c k ⋅ p l i k e p_{click} \cdot p_{like} pclick​⋅plike​ 有实际意义&#xff0c;等于在曝光中点赞的概率。 p c l i c k ⋅ p c o l l e c t p_{click} \cdot p_{collect} pclick​⋅pcollect​ 同理。 按多种排名做 ensemble sort。 某电商的融…

网络I/O学习-poll(三)

一、为什么要用Poll 由于select参数太多&#xff0c;较于复杂&#xff0c;调用起来较为麻烦&#xff1b;poll对其进行了优化 二、poll机制 poll也是一个系统调用&#xff0c;每次调用都会将所有客户端的fd拷贝到内核空间&#xff0c;然后进行轮询&#xff0c;判断IO是否就绪…

k8s(12) — 版本控制和滚动更新(金丝雀部署理念)

金丝雀部署简介&#xff1a; 1、基本概念 金丝雀部署是一种软件开发中的渐进式发布策略&#xff0c;其核心思想是通过将新版本应用逐步发布给一小部分用户&#xff08;即 “金丝雀” 用户&#xff09;&#xff0c;在真实环境中验证功能稳定性和性能表现&#xff0c;再逐步扩大发…

Google设置app-ads.txt

问题&#xff1a; 应用上架后admob后台显示应用广告投放量受限&#xff0c;需要设置app-ads.txt才行。 如何解决&#xff1a; 官方教程: 看了下感觉不难&#xff0c;创建一个txt&#xff0c;将第二条的代码复制进行就得到app-ads.txt了。 然后就是要把这个txt放到哪才可以…

docker安装rockerMQ

参考Docker部署RocketMQ5.x (单机部署配置参数详解不使用docker-compose直接部署)_rocketmq不推荐用docker部署-CSDN博客 镜像拉取 镜像地址&#xff1a; https://hub.docker.com/r/apache/rocketmq/tags 我在部署的时候最新发行版是5.1.0可以根据需求自行选择一个5.x的版本&a…

交叉引用、多个参考文献插入、跨文献插入word/wps中之【插入[1-3]、连续文献】

我们在写论文时&#xff0c;需要插入大量参考文献。 有时&#xff0c;一句话需要引用多个文献&#xff0c;如&#xff1a;[1-3]或者[1,3,4]这种形式多个文献插入、跨文献插入。 在上一篇文章中&#xff0c;我们提到可以直接打“-”或者“&#xff0c;”&#xff0c;但是word导出…

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲

PLC双人舞&#xff1a;ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析&#xff1a;施耐德PLC与AB PLC的互联互通 在现代工业自动化中&#xff0c;设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关&#xff0c;将施耐德P…

缺乏团队建设活动,如何增强凝聚力?

当一个团队缺乏系统性的建设活动时&#xff0c;成员之间容易产生疏离感、误解与信任缺失&#xff0c;最终影响整体执行力和目标达成。要有效增强团队凝聚力&#xff0c;应从设计高参与感的团队活动、结合业务与人文目标、营造持续共创的文化机制、推动跨层级协作互动等层面着手…

力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素

这道题直接用最笨的办法来做的&#xff0c;用递归来做&#xff0c;我们定义一个全局变量vector<int> element&#xff0c;然后使用中序遍历&#xff0c;每当碰到一个非空节点就将其加入到向量中&#xff0c;这样依赖当向量中的元素小于k时&#xff0c;就返回0&#xff0c…

Linux面试题集合(5)

把文件1的内容追加到文件2 cat 文件1>>文件2 把文件1和文件2合并成文件3 cat 文件1 文件2>文件3 使用less查看文件时&#xff0c;搜寻ab字符 /ab 用more和less如何查看文件 more&#xff1a; CtrlF -- 向下滚动一屏 CtrlB -- 返回上一屏 f -- 向下翻屏 b -- 向上翻屏 …

python动漫论坛管理系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…

Web 技术与 Nginx 网站环境部署

这里写目录标题 一. Web基础域名和DNS域名的概念域名的结构域名结构类型 Hosts文件Hosts文件的作用修改Hosts文件 DNS域名注册 网页与HTML网页概述HTML概述HTML基本标签HTML语法规则HTML文件结构 网站和主页Web1.0 与 Web2.0 静态网页与动态网页静态网页动态网页动态网页语言 H…

FP8精度革命:Hopper架构下大模型训练的误差传播控制方法

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 一、FP8为何成为大模型训练的新范式&#xff1f; 1.1 算力需求与精度演进的矛盾 当前大语言…

手动制做一个Transformer

本文来自I made a transformer by hand . 一直以来&#xff0c;笔者对 transformer 的注意力机制、qkv的理解都浮于表面&#xff0c;当然也不是说我看完 I made a transformer by hand 后理解有多深入&#xff0c;但确实加深了我对相关概念的理解&#xff0c;故搬运此文章&…

已解决——如何让网站实现HTTPS访问?

一、申请SSL证书 SSL证书是HTTPS实现的关键&#xff0c;它由受信任的证书颁发机构&#xff08;CA&#xff09;签发&#xff0c;用于验证网站的身份并加密数据传输。以下是申请SSL证书的常见步骤&#xff1a; 选择证书类型 根据网站的需求和预算&#xff0c;选择合适的SSL证书…

WebRTC技术EasyRTC嵌入式音视频通信SDK助力智能电视搭建沉浸式实时音视频交互

一、方案概述​ EasyRTC是一款基于WebRTC技术的开源实时音视频通信解决方案&#xff0c;具备低延迟、高画质、跨平台等优势。将EasyRTC功能应用于智能电视&#xff0c;能够为用户带来全新的交互体验&#xff0c;满足智能电视在家庭娱乐、远程教育、远程办公、远程医疗等多种场…