0

0

​Java集合:Set、List、Queue、Map四个体系的归纳总结

php是最好的语言

php是最好的语言

发布时间:2018-08-08 10:51:52

|

2572人浏览过

|

来源于php中文网

原创

java集合大致分为set、list、queue、map四个体系 

其中Set代表无序、不可重复的集合;List代表有序、重复集合;Map代表具有映射关系的集合;Queue是队列的实现。

集合和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),集合里面只能保存对象(实际上只是保存对象的引用变量)。

Java集合中有两个派生的 接口:Collection 和 Map
Collection集合体系的继承树:

1.pngMap集合体系的继承树:
1.png

立即学习Java免费学习笔记(深入)”;

下面分别讲述
Set集合:
Set集合类似一个罐子,程序可以依次将多个对象“丢进”里面,Set不会记住元素的添加顺序,Set集合不允许有相同的元素。

HashSet:
特点:
不能保证元素的排列顺序
HashSet不是同步的
集合元素值可以为null
HashSet判断两个元素相等的标准是:两个对象通过equals()方法比较相等,并且两个对象的hashcode()方法返回值也相等。
注意:当把一个对象放进HashSet中时,如果需要重写该对象的equals()方法,则应该重写其hashCode()方法。规则是:如果两个对象通过equals()方法比较返回true,两个对象的hashCode值应该相同。

LinkedSet:
LinkedSet根据原始的hashCode的值来决定元素的存储位置,但是他同时使用链表维护元素的次序,这样使得元素的插入的顺序保存。LinkedSet会按照元素的添加顺序来访问集合里的元素。
LinkedSet需要维护元素的插入位置,因此性能会略低于HashSet的性能。

TreeSet:
TreeSet可以确保集合元素处于排序状态。
TreeSet并不是根据元素的插入顺序进行排序的,而是根据元素的实际值的大小来进行排序的。
TreeSet采用红黑树的数据结构来存储集合元素。
TreeSet支持两种排序方法:自然排序和定制排序。在默认情况下,TreeSet采用自然排序。

自然排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列。在默认情况下,TreeSet采用自然排序。
当把一个对象加入TreeSet集合中时,TreeSet调用该对象的compareTo(Object obj)方法与容器中的其他对象比较大小,然后根据红黑树结构找到它的存储位置。
判断两个对象是否相等的唯一标准是:两个对象通过compareTo(Object obj)方法比较是否返回0。
如果两个对象通过equals()方法比较返回true时,这两个对象通过compareTo(Object obj)方法比较应返回0。

定制排序:如果需要实现定制排序,则需要在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。

EnumSet:
EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内部的定位顺序来决定集合元素的顺序。
EnumSet内部以位向量的形式存储。
EnumSet集合不允许加入null元素。

各Set实现类的性能分析:
HashSet的性能总比TreeSet好,因为TreeSet需要额外的红黑树算法来维护集合的次序。
LinkedSet对于普通的插入、删除操作,LinkedSet比HashSet要稍微慢一些,这是由维护链表所带来的额外开销造成的。但是由于有链表,遍历LinkedSet比较快。
EnumSet性能最好,但只能保存同一个枚举类得枚举值作为集合元素。

List:
List代表一个元素有序,可重复的结合,集合中的每个元素都有对应的顺序索引。
List集合可以根据位置索引来访问集合中的元素,因此List可以使用for循环来遍历。

ArrayList、LinkedList和Vector
ArrayList源码分析:
LinkedList源码分析:

Sesame AI
Sesame AI

一款开创性的语音AI伴侣,具备先进的自然对话能力和独特个性。

下载

Queue:
Queue用于模拟队列这种数据结构。
PriorityQueue:
PriorityQueue保存队列元素的顺序并不是按照加入的顺序,而是按照队列元素的大小进行排序的。
PriorityQueue不允许插入null元素。

Deque:
Deque接口是Queue接口的子接口,它代表一个双端队列。
当程序中需要使用“栈”这种数据结构时,推荐使用ArrayDeque。

各种线性表的性能分析:
1.如果需要遍历List集合元素,对ArrayList、Vector集合,应该使用随机访问方法(get)来遍历集合元素,这样性能更好;对于LinkedList集合应该使用迭代器(Iterator)来遍历集合元素。
2.如果需要经常执行插入、删除,应使用LinkedList。
3.如果多线程同时访问List集合中的元素,应该使用Collections将集合包装成线程安全的集合。

Map:
Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false。
Map中存在一个keySet()方法,用于返回Map中所有key组成的Set集合。

HashMap、Hashtable:
HashMap和Hashtable的区别:
1.Hashtable是一个线程安全的Map,HashMap是非线程安全的,所以HashMap的性能比较好。
2.Hashtable不允许使用null作为key和value,HashMap允许使用null作为key或者value。

Hashtable、HashMap判断两个key相等的标准是:两个的key的equals()方法返回true,两个key的HashCode值相同;判断两个value相等的标准是value的equals()方法返回值相同。

LinkedMap:
LinkedMap会记住key-value的添加顺序。

TreeMap:
TreeMap也是采用了红黑树的结构,TreeMap中判断两个key相等的标准是:
两个key通过compareTo()方法的返回值为0.(在自然排序下)
两个key通过compareTo()方法的返回值为0.同时equals()方法比较返回为true。(定制排序下)。

EnumMap:
EnumMap内部以数组的形式保存。
EnumMap不允许使用null作为key,但是允许value为null。

Map的性能分析:
HashMap的性能要比Hashtable的性能要好。
TreeMap中的key-value对总是处于有序状态,无须进行专门的排序操作。
对于一般的运用场景,多考虑使用HashMap。
LinkedMap要比HashMap慢,是因为需要维护链表来保持key-value的添加顺序。
EnumMap的性能最好,但是只能使用同一个枚举类的枚举值作为key。

相关推荐:

Java集合Set、List、Map的遍历方法

一段代码搞懂关于Java中List、Set集合及Map的使用

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

549

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

30

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

44

2026.01.06

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1923

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

656

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2392

2025.12.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.9万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 4.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号