Java集合框架之LinkedHashSet類解讀
一、LinkedHashSet 類的介紹
LinkedHashSet是HashSet的 有序版本 ,它跨所有元素維護(hù)一個(gè)雙向鏈接的List。
- 當(dāng)需要 維護(hù)迭代順序時(shí) ,就使用這個(gè)類。
- 當(dāng)遍歷HashSet時(shí),順序是不可預(yù)測(cè)的,而LinkedHashSet允許我們按插入元素的順序遍歷元素。
- 當(dāng)使用迭代器循環(huán)使用LinkedHashSet時(shí),元素將按插入的順序返回。
LinkedHashSet的層次結(jié)構(gòu)如下:
LinkedHashSet類聲明:
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
LinkedHashSet類的要點(diǎn)如下:
- LinkedHashSet類只包含HashSet這樣的唯一元素。
- LinkedHashSet類提供了所有可選的集操作,并允許有空元素。
- LinkedHashSet類是非同步的。
- LinkedHashSet類維護(hù)插入順序。
Java LinkedHashSet類的構(gòu)造函數(shù):
Constructor | Description |
HashSet() | 它用于構(gòu)造一個(gè)默認(rèn)的HashSet。 |
HashSet(Collection c) | 它使用集合c中的元素來(lái)初始化散列集。 |
LinkedHashSet(int capacity) | 它用于將鏈接哈希集的容量初始化為給定的整數(shù)值容量。 |
LinkedHashSet(int capacity, float fillRatio) | 它用于根據(jù)其參數(shù)初始化散列集的容量和填充比例(也稱為負(fù)載容量)。 |
二、LinkedHashSet 類的操作
在LinkedHashSet類上執(zhí)行各種操作
2.1 添加操作
為了向LinkedHashSet添加元素,可以使用add()方法。
這與HashSet不同,因?yàn)樵贖ashSet中,插入順序不保留,而是保留在LinkedHashSet中。
public static void main(String[] args) { // 創(chuàng)建 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 添加元素 // 插入是有序的 hs.add("深圳"); hs.add("廣州"); hs.add("東莞"); // 輸出 System.out.println("LinkedHashSet : " + hs); }
輸出:
LinkedHashSet : [深圳, 廣州, 東莞]
2.2 刪除操作
可以使用remove()方法從LinkedHashSet中刪除這些值。
實(shí)例:
public static void main(String[] args) { // 創(chuàng)建 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 添加元素 // 插入是有序的 hs.add("深圳"); hs.add("廣州"); hs.add("東莞"); // 輸出 System.out.println("LinkedHashSet : " + hs); // 刪除 元素: 深圳 hs.remove("廣州"); System.out.println("刪除后的集合:"+hs); }
輸出:
LinkedHashSet : [深圳, 廣州, 東莞]
刪除后的集合:[深圳, 東莞]
2.3 迭代操作
使用iterator()方法迭代LinkedHashSet的元素。
最著名的方法是使用增強(qiáng)的for循環(huán)。
實(shí)例:
public static void main(String[] args) { // 創(chuàng)建 LinkedHashSet<String> hs = new LinkedHashSet<String>(); // 添加元素 // 插入是有序的 hs.add("深圳"); hs.add("廣州"); hs.add("東莞"); // 輸出 System.out.println("LinkedHashSet : " + hs); // 使用迭代器 Iterator itr = hs.iterator(); while (itr.hasNext()) System.out.print(itr.next() + ", "); // 換行 System.out.println(); // 使用 for-each for (String s : hs) System.out.print(s + ", "); System.out.println(); }
輸出:
LinkedHashSet : [深圳, 廣州, 東莞]
深圳, 廣州, 東莞,
深圳, 廣州, 東莞,
三、LinkedHashSet 類的API
在類java.util.AbstractSet中聲明的方法
METHOD | DESCRIPTION |
equals() | 用于驗(yàn)證對(duì)象與HashSet是否相等并比較它們。只有當(dāng)兩個(gè)HashSet都包含相同的元素時(shí),該列表才會(huì)返回true,無(wú)論順序如何。 |
hashcode() | 返回此集合的散列代碼值。 |
removeAll(collection) | 此方法用于刪除集合中存在于集合中的所有元素。如果該集合因調(diào)用而發(fā)生更改,則此方法返回true。 |
在類java.util.AbstractCollection中聲明的方法
METHOD | DESCRIPTION |
addAll(collection) | 此方法用于將上述集合中的所有元素追加到現(xiàn)有集合。元素是隨機(jī)添加的,不遵循任何特定的順序。 |
containsAll(collection) | 此方法用于檢查集合是否包含給定集合中的所有元素。如果集合包含所有元素,則該方法返回true;如果缺少任何元素,則返回false。 |
retainAll(collection) | 此方法用于保留集合中給定集合中提到的所有元素。如果該集合因調(diào)用而發(fā)生更改,則此方法返回true。 |
toArray() | 此方法用于形成與Set的相同元素的數(shù)組。 |
toString() | Java HashSet的toString()方法用于返回HashSet集合元素的字符串表示形式。 |
接口java.util.Collection中聲明的方法
METHOD | DESCRIPTION |
parallelStream() | 返回一個(gè)可能并行的流,并將此集合作為其源。 |
removeIf(Predicate<? super E> filter) | 刪除此集合中滿足給定謂詞的所有元素。 |
stream() | 返回一個(gè)序列流,并將此集合作為其源。 |
在類java.util.HashSet中聲明的方法
METHOD | DESCRIPTION |
add(E e) | 用于添加指定的元素,如果該元素不存在,則返回false。 |
clear() | 用于從集合中刪除所有元素。 |
contains(Object o) | 用于當(dāng)元素在set中出現(xiàn)時(shí)返回true。 |
remove(Object o) | 用于刪除集合中存在的元素。 |
iterator() | 用于返回一個(gè)遍歷集合中元素的迭代器。 |
isEmpty() | 用于檢查集合是否為空。如果為空則返回true,如果set的條件非空則返回false。 |
size() | 用于返回集合的大小。 |
clone() | 用于創(chuàng)建該集合的淺副本。 |
接口java.lang.Iterable中聲明的方法
METHOD | DESCRIPTION |
forEach(Consumer action) | 對(duì)Iterable中的每個(gè)元素執(zhí)行給定的操作,直到所有元素都被處理完或該操作引發(fā)異常。 |
到此這篇關(guān)于Java集合框架之LinkedHashSet類解讀的文章就介紹到這了,更多相關(guān)Java集合LinkedHashSet內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí)
本篇文章主要介紹了30分鐘入門Java8之lambda表達(dá)式學(xué)習(xí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04Java?LocalDateTime獲取時(shí)間信息、格式化、轉(zhuǎn)換為數(shù)字時(shí)間戳代碼示例
其實(shí)我們?cè)贘ava項(xiàng)目中對(duì)日期進(jìn)行格式化,主要是利用一些日期格式化類,下面這篇文章主要給大家介紹了關(guān)于Java?LocalDateTime獲取時(shí)間信息、格式化、轉(zhuǎn)換為數(shù)字時(shí)間戳的相關(guān)資料,需要的朋友可以參考下2023-11-11Java?常量池詳解之class文件常量池?和class運(yùn)行時(shí)常量池
這篇文章主要介紹了Java?常量池詳解之class文件常量池?和class運(yùn)行時(shí)常量池,常量池主要存放兩大類常量:字面量,符號(hào)引用,本文結(jié)合示例代碼對(duì)java class常量池相關(guān)知識(shí)介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12SpringBoot3整合SpringDoc實(shí)現(xiàn)在線接口文檔的詳細(xì)過(guò)程
這篇文章主要介紹了SpringBoot3整合SpringDoc實(shí)現(xiàn)在線接口文檔的詳細(xì)過(guò)程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06SpringBoot配置Druid數(shù)據(jù)監(jiān)控代碼實(shí)例
這篇文章主要介紹了SpringBoot配置Druid數(shù)據(jù)監(jiān)控代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06vue 使用vuex在頁(yè)面跳轉(zhuǎn)的實(shí)現(xiàn)方式
這篇文章主要介紹了vue 使用vuex在頁(yè)面跳轉(zhuǎn)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java 實(shí)戰(zhàn)練手項(xiàng)目之校園超市管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+Mysql+Maven+Bootstrap實(shí)現(xiàn)一個(gè)校園超市管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式(小結(jié))
這篇文章主要介紹了Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09spring+maven實(shí)現(xiàn)郵件發(fā)送
這篇文章主要為大家詳細(xì)介紹了spring+maven實(shí)現(xiàn)郵件發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07