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

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

Aug 08, 2018 am 10:51 AM
koleksi java

Java集合大致分为Set、List、Queue、Map四个体系 

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

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

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

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

下面分别讲述
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源码分析:

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

Atas ialah kandungan terperinci ​Java集合:Set、List、Queue、Map四个体系的归纳总结. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul? Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

See all articles