Jadual Kandungan
Set集合不允许包含相同的元素,集合中对象之间没有明显的顺序
HashSet,LinkedHashSet,TreeSet,是Set的主要实现类
TreeSet
各种Set性能比较
LinkedList与ArrayList区别
Map用于保存具有映射关系的数据,key和value都可以是任何引用类型的数据,但是map的key值是唯一的不能重复
HashMap 和Hashtable是Map的两个实现类
TreeMap
Collection与Collections的区别
Rumah Java javaTutorial java集合框架学习笔记

java集合框架学习笔记

Apr 04, 2017 am 10:36 AM

java集合类可以用于存储数量不等的多个对象,并且可以实现常用的数据结构比如栈,队列等。与数组不同,数组长度是不可变的,数组元素可以存放基本类型和对象类型而集合里只能保存对象(实质上是对象的引用变量),Java集合大致可以分为SetList、和Map ,其中Set代表无序,不可重复的集合,List代表有序,可重复的集合,Map代表具有映射关系的集合,map中key唯一,value可重复。其中Set ,List 以及java5之后新增的 Queue队列是Collection下派生的子接口

Set集合不允许包含相同的元素,集合中对象之间没有明显的顺序

HashSet,LinkedHashSet,TreeSet,是Set的主要实现类

其中 HashSet 不能保证元素的排列顺序,HashSet不是同步的,HashSet集合元素允许为null,当一个对象存入HashSet中时,HashSet会调用对象的hashCode方法到的对象的hashCode值,根据该hashCode值决定对象在HashSet中的存储位置。HashSet 中判断两个对象是否相等是通过比较equals()和hashCode()方法返回值都相等来判断的
LinkedHashSet 是HashSet的一个子类,但它同时使用链表来维护元素的次序,这样使得元素看起来是以插入的顺序保存的,因为其需要维护元素的插入次序,所以性能略低于HashSet的性能,由于其依然是HashSet所以同样元素不能重复

TreeSet

TreeSet是SortedSet接口的实现类,同样TreeSet可以去保证集合元素处于排序状态,TreeSet会调用集合元素的comparTo(Object obj)方法比较元素之间的大小关系,然后将集合元素升序排列,即自然排序。TreeSet也可以通过Comparator接口实现定制排序,在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。

各种Set性能比较

HashSet的性能总比TreeSet要好,因为TreeSet需要额外的算法来维护集合元素的次序,只有当需要保持排序的set 时才应该使用TreeSet 否则都应使用HashSet 。另外LinkedHashSet是HashSet的子类,对应普通的插入,删除操作,LinkedHashSet 比HashSet 的性能要稍微慢点,是因为维护链表所带来的的开销造成的,不过因为有了链表,遍历LinkedHashSet时会更快一点。但是set的三个实现类都不是线程安全的,通常可以使用Collections工具类的synchronizedSortedSet方法来包装该set集合,此操作最好在创建时进行
例如:SortedSet  s = Collections.synchronizedSortedSet(<a href="http://www.php.cn/wiki/165.html" target="_blank">new</a> TreeSet(...));

List 集合代表一个有序的.可以重复的集合,集合中的元素都有其对应的索引

ArrayList 与 Vector是List的两个典型实现,还有一个LinkedList

其中ArrayList和Vector类封装了一个动态的,允许再分配的Object[ ] 数组,当添加的元素个数超出该数组长度时,则初始长度会自动增加。ArrayList和Vector的显著区别是ArrayList不是线程安全的,而Vector是线程安全的,无需程序保证集合的同步性。因为Vector是线程安全的,所以Vector色性能要比ArrayList要低。即使需要保证线程安全,一般也不推荐使用Vector,而是使用Collections工具类的相关方法将ArrayList包装成一个线程安全的类。
Vector还有一个子类叫Stack栈,用于模拟栈这种数据结构,后进先出,由于是继承关系,所以Stack也是线程安全的,所以性能比较差,不推荐使用,如果需要使用栈这种数据结构,可以考虑使用LinkedList.
LinkedList 也是List 的实现类,它是一个基于链表实现的List,对于顺序访问集合中的元素进行了优化,特别是插入和删除元素是非常快,LinkedList既实现了List接口,又实现了Deque接口,由于实现了Deque接口可以作为栈来使用。 Queue集合用于模拟队列这种数据结构,先进后出 ,Deque是Queue的一个子接口,代表一个双端队列,允许从两端操作队列的元素。

LinkedList与ArrayList区别

由于ArrayList内部是以数组的形式来保存集合中的元素,因此随机访问集合元素时拥有较好的性能,而LinkedList是以链表的形式来保存集合的元素的,所以随机访问的性能较差,但是在插入、删除元素时性能非常出色。

Map用于保存具有映射关系的数据,key和value都可以是任何引用类型的数据,但是map的key值是唯一的不能重复

HashMap 和Hashtable是Map的两个实现类

Hashtable 是一个线程安全的Map实现类,但是HashMap不是线程安全的,所以HashMap的性能要稍好一点。
另外Hashtable不允许使用null作为key和value,试图将null放进Hashtable会引发空指针异常,但是HashMap可以使用null作为key和value,由于key不能重复,所以HashMap最多只有一个key为null,但是可以有多个value为null。
HashMap和Hashtable判断两个key相等额标准是两个key通过equals()和hashCode()方法返回值都相等。
LinkedHashMap 是HashMap的一个子类,LinkedHashMap也使用双向链表来维护key的次序,即迭代顺序与插入顺序保持一致。因为要维护元素的插入顺序,所有性能较HashMap略低。

TreeMap

Map下还有一个SortedMap接口,SortedMap接口又一个TreeMap实现类TreeMap保存key-value对时,需要根据key对节点进行排序,TreeMap排序分为自然排序和定制排序,自然排序时key必须实现Comparable接口,定时排序时,创建TreeMap时需要传入一个Comparator对象,由该对象对TreeMap中的key进行排序。与TreeSet类似。TreeMap 比 HashMap和Hashtable效率要慢,因为其要保持排序。

Collection与Collections的区别

Collection是Java的集合框架的一个接口
Collections 是集合框架中的一个工具类,该工具类提供了大量方法对集合元素进行排序,查询,修改等操作,还提供了将集合对象设置为不可变,对象集合实现同步控制的一些方法。

Atas ialah kandungan terperinci java集合框架学习笔记. 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 尊渡假赌尊渡假赌尊渡假赌

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)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

See all articles