在本文中,我們將深入研究HashSet Java。作為Java集合框架的一個基本部分,它可能是最主流的Set執行。
HashSet是Java Collections API中關鍵的信息結構之一。我們應該回顧一下這個執行的主要部分:
- 它存儲異常組件並授予空值
- 它是由HashMap讚助的
- 它沒有跟上收錄請求
- 它不是字符串安全的
注意,當HashSet出現時,會引入這個內部HashMap:
public HashSet() {map = new HashMap<>();}
如果您需要進一步了解HashMap的功能,可以在這裏閱讀本文。
API
在本節中,我們將研究最常用的技術並查看一些簡單的模型。
1.add ()
add()技術可用於向集合中添加組件。技術契約表示,當組件在集合中不存在時,將添加該組件。在極有可能添加了組件的情況下,該技術返回的是有效的,而不是偽的。
我們可以像這樣向HashSet中添加一個組件:
@Test public void whenAddingElement_shouldAddElement() {Set hashset = new hashset <>();assertTrue (hashset。添加(“字符串添加"));}
從執行的角度來看,添加策略是一個關鍵的策略。執行的微妙之處描述了HashSet如何在內部運行並使用HashMap的put技術:
公共布爾添加(E E){返回映射。put(e, PRESENT) ==無效;} freestar
guide變量是內部支持HashMap的引用:
private transient HashMap映射;
明智的做法是,首先熟悉哈希代碼,以便對組件如何在基於哈希的信息結構中進行協調有一個基本的理解。
總結:
HashMap是各種罐頭,默認限製為16個組件—每個罐頭與一個備選hashcode尊重進行比較
如果不同的項目具有相同的hashcode尊重,那麼它們將被單獨放在一個桶中。
在達到堆因子的概率很小的情況下,另一個展品的大小是過去的兩倍,整個團夥組件被重複,並在新的比較桶中重新排列
為了恢複值,我們哈希一個鍵,修改它,然後轉到一個比較罐,並搜索可能連接的清單,如果有超過一個articleJava HashSet類用於利用哈希表的容量進行分類。它獲取AbstractSet類並執行Set接口
Java HashSet類的重點是:
- HashSet通過使用一個稱為哈希的係統來存儲組件。
- HashSet包含了特殊的組件。
- HashSet允許無效值。
- HashSet類是非同步的。
- HashSet沒有跟上包含請求。在這裏,組件是基於它們的hashcode嵌入的。
- HashSet是搜索任務的最佳方法。
- HashSet的底層默認限製是16,堆因子是0.75。
List和Set的對比
綱要可以包含複製組件,而集合則特別包含一種組件。
HashSet類的排序
HashSet類擴展了執行Set接口的AbstractSet類。Set接口在遞進請求中獲得Collection和Iterable接口。
HashSet類肯定
我們應該看到java.util.HashSet類的表示。
公共類HashSet擴展AbstractSet執行Set,可克隆,可序列化
Java HashSet類的構造函數
1) HashSet():它被用來構建一個默認HashSet。
2) HashSet(int capacity):它用於將哈希集的限製設置為給定的值限製。隨著組件被添加到HashSet中,限製也隨之發展。
3) HashSet(int limit, glide loadFactor):它用於將哈希集的極限引入到給定的整數值極限和預定的負擔因子。
4) HashSet(收集< ?擴展到E> c):它被用來通過利用分類c的組件來初始化散列集。
Java HashSet類的策略
Java HashSet類的不同策略如下:
SN | 方法和類型 | 描述 |
1)布爾 | 添加(E E) | 它用於在預定義組件現在不存在的情況下將其添加到此集合。 |
2)無效 | clear () | 它被用於集合中的全部組件。 |
3)對象 | 克隆() | 它用於返回此HashSet場合的淺副本:不克隆實際組件 |
4)布爾 | 包含對象(o) | 如果此集合包含預定的組件,則使用它返回有效。 |
5)布爾 | isEmpty () | 如果此集合不包含任何組件,則使用它返回有效值。 |
6)迭代器< E > | 迭代器() | 它用於返回該集合中組件的迭代器。 |
7)布爾 | 刪除(對象o) | 它用於從這個集合中刪除預定義組件,除非該組件有極小的可能可用。 |
8) int | 尺寸() | 它用於返回集合中組件的數量。 |
9) Spliterator < E > | spliterator () | 它用於對集合中的組件進行延遲限製和快速分割 |
Java HashSet例子
我們可以看到HashSet的基本輪廓。注意,這些部分以無序的排列重新排列。
進口java.util。*;類HashSet1{public static void main(String args[]){/創建HashSet並添加組件HashSet set=new HashSet();set.add(“一”);set.add(“兩個”);set.add(“三”);set.add(“四”);set.add(“5”);迭代器<字符串> i = set.iterator ();而(i.hasNext ()) {System.out.println (i.next ());}}}
輸出:
五個
一個
四個
兩個
三個
Java HashSet模型忽略重複部分
在這個模型中,我們看到HashSet不允許重複部分:
進口java.util。*;類HashSet2{public static void main(String args[]){/創建HashSet並添加組件HashSet set=new HashSet();set.add (Ravi);set.add(“維”);set.add (Ravi);set.add (Ajay);/遍曆組件Iterator itr=set.iterator();而(itr.hasNext ()) {System.out.println (itr.next ());}}}
輸出:
Ajay
維賈伊
拉維
Java HashSet消除組件指南
在這裏,我們看到了各種消除組件的方法:
進口java.util。*;類HashSet3{public static void main(String args[]){HashSet set=new HashSet();set.add (Ravi);set.add(“維”);set.add(“阿倫”);set.add(“蘇米特”);system . out。println(“組件的開始綱要:”+set);/從HashSet set.remove("Ravi")中刪除顯式組件;system . out。println("After conjuring remove(object) technique: "+set); HashSet set1=new HashSet(); set1.add("Ajay"); set1.add("Gaurav"); set.addAll(set1); System.out.println("Updated List: "+set); /Removing every one of the new components from HashSet set.removeAll(set1); System.out.println("After summoning removeAll() technique: "+set); /Removing components based on indicated condition set.removeIf(str->str.contains("Vijay")); System.out.println("After conjuring removeIf() strategy: "+set); /Removing every one of the components accessible in the set set.clear(); System.out.println("After conjuring clear() strategy: "+set); } }
[Vijay, Ravi, Arun, Sumit]
在召喚移除(物體)技術之後:[Vijay, Arun, Sumit]
刷新列表:[Vijay, Arun, Gaurav, Sumit, Ajay]
在召喚removeAll()技術之後:[Vijay, Arun, Sumit]
在調用removeIf()技術之後:[Arun, Sumit]
在召喚clear()技術之後:[]
來自另一個集合的Java HashSet
進口java.util。*;類HashSet4{public static void main(String args[]){ArrayList list=new ArrayList();list.add (Ravi);list.add(“維”);list.add (Ajay);HashSet <字符串>設置= new HashSet(列表);set.add(“Gaurav”);迭代器<字符串> i = set.iterator ();而(i.hasNext ()) {System.out.println (i.next ());}}}
維賈伊
拉維
Gaurav
Ajay
Java HashSet示例:Book
我們應該看到一個HashSet模型,在這個模型中,我們向set中添加書籍並打印每一本書。
進口java.util。*;類Book {int id;字符串名稱、作者、出版社;int數量;public Book(int id,字符串名稱,字符串作者,字符串分發者,int數量){this。id = id;this.name =名稱;這一點。作者=創造者;這一點。出版商=分配器; this.quantity = amount; } } public class HashSetExample { public static void main(String[] args) { HashSet set=new HashSet(); /Creating Books Book b1=new Book(101,"Let us C","Yashwant Kanetkar","BPB",8); Book b2=new Book(102,"Data Communications and Networking","Forouzan","Mc Graw Hill",4); Book b3=new Book(103,"Operating System","Galvin","Wiley",6); /Adding Books to HashSet set.add(b1); set.add(b2); set.add(b3); /Traversing HashSet for(Book b:set){ System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity); } } }
產量:
8 . C Yashwant Kanetkar
102數據通信和網絡Forouzan Mc Graw Hill
103操作係統
Java LinkedHashSet類
Java HashSet類的排序
Java LinkedHashSet類是set接口的哈希表和鏈接綱要執行。它獲取HashSet類並執行Set接口。
Java LinkedHashSet類的重點是:
- Java LinkedHashSet類包含有趣的組件,就像HashSet一樣。
- Java LinkedHashSet類提供所有可自由支配的set活動,並許可無效的組件。
- Java LinkedHashSet類是非同步的。
- Java LinkedHashSet類保持包含請求。
LinkedHashSet類的排序
LinkedHashSet類擴展為執行Set接口的HashSet類。Set接口在各種分級請求中獲得Collection和Iterable接口。
LinkedHashSet類表示
我們來看看java.util.LinkedHashSet類的語句。
1.LinkedHashSet
構造函數 | 描述 |
HashSet () | 它被用來開發一個默認HashSet。 |
HashSet (c)集合 | 它通過利用分類c的組件來初始化散列集。 |
LinkedHashSet (int容量) | 它用於將連接散列集的極限聲明為給定的整數值極限。 |
LinkedHashSet(int limit, skim fillRatio)用於從它的爭用中引入哈希集的限製和填充比例(另外稱為負載限製)。
Java LinkedHashSet例子
我們應該看到Java LinkedHashSet類的一個基本示例。在這裏,您可以看到組件在包含請求中重複。
進口java.util。*;類LinkedHashSet1{公共靜態void main(String args[]){/創建HashSet並添加組件LinkedHashSet set=new LinkedHashSet();set.add(“一”);set.add(“兩個”);set.add(“三”);set.add(“四”);set.add(“5”);迭代器<字符串> i = set.iterator ();而(i.hasNext ()) {System.out.println (i.next ());}}}
一個
兩個
三個
四個
五個
Java LinkedHashSet模型忽略複製元素
進口java.util。*;類LinkedHashSet2{公共靜態void main(String args[]){LinkedHashSet al=new LinkedHashSet();al.add (Ravi);al.add(“維”);al.add (Ravi);al.add (Ajay);迭代器<字符串> itr = al.iterator ();而(itr.hasNext ()) {System.out.println (itr.next ());}}}
拉維
維賈伊
Ajay
示例:Book
進口java.util。*;類Book {int id;字符串名稱、作者、出版社;int數量;public Book(int id,字符串名稱,字符串作者,字符串分發者,int數量){this。id = id;this.name =名稱;這一點。作者=創造者;這一點。出版商=分配器; this.quantity = amount; } } public class LinkedHashSetExample { public static void main(String[] args) { LinkedHashSet hs=new LinkedHashSet(); /Creating Books Book b1=new Book(101,"Let us C","Yashwant Kanetkar","BPB",8); Book b2=new Book(102,"Data Communications and Networking","Forouzan","Mc Graw Hill",4); Book b3=new Book(103,"Operating System","Galvin","Wiley",6); /Adding Books to hash table hs.add(b1); hs.add(b2); hs.add(b3); /Traversing hash table for(Book b:hs){ System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity); } } }
產量:
8 . C Yashwant Kanetkar
102數據通信和網絡Forouzan Mc Graw Hill
103操作係統
至此,關於HashSet in Java的博客就結束了。我們希望您能從中獲得一些有價值的見解。如果你想了解更多這樣的概念,請加入beplay2018官网偉大學習學院的免費在線課程今天和upskill。