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

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

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

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源码分析:

Facet
Facet

Facet.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的使用

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

844

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

742

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

740

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

400

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

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

精品课程

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

共10课时 | 0.8万人学习

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

共60课时 | 3.9万人学习

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

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