LinkedHashSet是 HashSet 的有序版本,它維護跨所有元素的 doubly-linked 列表。當需要維護迭代順序時,使用此類。當迭代一個HashSet順序是不可預測的,而 LinkedHashSet 允許我們按照插入的順序迭代元素。當使用迭代器循環LinkedHashSet時,元素將按照插入的順序返回。
LinkedHashSet的層次結構如下:
Parameters: 該集合維護的元素類型
All Implemented Interfaces are as listed below: Serializable Cloneable, Iterable<E> Collection<E> Set<E>
用法:宣言
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable
- 僅像 HashSet 那樣包含獨特的元素。它擴展了 HashSet 類並實現了 Set 接口。
- 維護插入順序。
Constructors of LinkedHashSet Class
1.LinkedHashSet():該構造函數用於創建默認的HashSet
LinkedHashSet<E> hs = new LinkedHashSet<E>();
2. LinkedHashSet(Collection C):用於用集合C的元素初始化HashSet。
LinkedHashSet<E> hs = new LinkedHashSet<E>(Collection c);
3. LinkedHashSet(int size):用於用參數中提到的整數初始化LinkedHashSet的大小。
LinkedHashSet<E> hs = new LinkedHashSet<E>(int size);
4. LinkedHashSet(int capacity, float fillRatio):可用於初始化容量和填充率,也稱為LinkedHashSet的負載容量,參數中提到了參數。當元素數量超過哈希集的容量時乘以填充率從而擴大LinkedHashSet的容量。
LinkedHashSet<E> hs = new LinkedHashSet<E>(int capacity, int fillRatio);
例子:
Java
// Java Program to Illustrate LinkedHashSet
// Importing required classes
import java.util.LinkedHashSet;
// Main class
// LinkedHashSetExample
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty LinkedHashSet of string type
LinkedHashSet<String> linkedset
= new LinkedHashSet<String>();
// Adding element to LinkedHashSet
// using add() method
linkedset.add("A");
linkedset.add("B");
linkedset.add("C");
linkedset.add("D");
// Note: This will not add new element
// as A already exists
linkedset.add("A");
linkedset.add("E");
// Getting size of LinkedHashSet
// using size() method
System.out.println("Size of LinkedHashSet = "
+ linkedset.size());
System.out.println("Original LinkedHashSet:"
+ linkedset);
// Removing existing entry from above Set
// using remove() method
System.out.println("Removing D from LinkedHashSet: "
+ linkedset.remove("D"));
// Removing existing entry from above Set
// that does not exist in Set
System.out.println(
"Trying to Remove Z which is not "
+ "present: " + linkedset.remove("Z"));
// Checking for element whether it is present inside
// Set or not using contains() method
System.out.println("Checking if A is present="
+ linkedset.contains("A"));
// Noew lastly printing the updated LinkedHashMap
System.out.println("Updated LinkedHashSet: "
+ linkedset);
}
}
Size of LinkedHashSet = 5 Original LinkedHashSet:[A, B, C, D, E] Removing D from LinkedHashSet: true Trying to Remove Z which is not present: false Checking if A is present=true Updated LinkedHashSet: [A, B, C, E]
Performing Various Operations on the LinkedHashSet Class
讓我們看看如何對 LinkedHashSet 執行一些常用的操作。
操作一:添加元素
為了向 LinkedHashSet 添加元素,我們可以使用 add() 方法。這與HashSet不同,因為在HashSet中,不保留插入順序,而是在LinkedHashSet中保留。
例子:
Java
// Java Program to Add Elements to LinkedHashSet
// Importing required classes
import java.io.*;
import java.util.*;
// Main class
// AddingElementsToLinkedHashSet
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty LinkedHashSet
LinkedHashSet<String> hs = new LinkedHashSet<String>();
// Adding elements to above Set
// using add() method
// Note: Insertion order is maintained
hs.add("Geek");
hs.add("For");
hs.add("Geeks");
// Printing elements of Set
System.out.println("LinkedHashSet : " + hs);
}
}
LinkedHashSet : [Geek, For, Geeks]
操作2:刪除元素
可以使用remove() 方法從LinkedHashSet 中刪除這些值。
例子:
Java
// Java program to Remove Elements from LinkedHashSet
// Importing required classes
import java.io.*;
import java.util.*;
// Main class
// RemoveElementsFromLinkedHashSet
class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating an empty LinekdhashSet of string type
LinkedHashSet<String> hs
= new LinkedHashSet<String>();
// Adding elements to above Set
// using add() method
hs.add("Geek");
hs.add("For");
hs.add("Geeks");
hs.add("A");
hs.add("B");
hs.add("Z");
// Printing all above elements to the console
System.out.println("Initial HashSet " + hs);
// Removing the element from above Set
hs.remove("B");
// Again removing the element
System.out.println("After removing element " + hs);
// Returning false if the element is not present
System.out.println(hs.remove("AC"));
}
}
Initial HashSet [Geek, For, Geeks, A, B, Z] After removing element [Geek, For, Geeks, A, Z] false
操作3:迭代LinkedHashSet
使用以下方法迭代 LinkedHashSet 的元素 iterator()方法。最著名的是使用增強的 for 循環。
例子:
Java
// Java Program to Illustrate Iterating over LinkedHashSet
// Importing required classes
import java.io.*;
import java.util.*;
// Main class
// IteratingLinkedHashSet
class GFG {
// Main driver method
public static void main(String[] args)
{
// Instantiate an object of Set
// Since LinkedHashSet implements Set
// Set points to LinkedHashSet
Set<String> hs = new LinkedHashSet<String>();
// Adding elements to above Set
// using add() method
hs.add("Geek");
hs.add("For");
hs.add("Geeks");
hs.add("A");
hs.add("B");
hs.add("Z");
// Iterating though the LinkedHashSet
// using iterators
Iterator itr = hs.iterator();
while (itr.hasNext())
System.out.print(itr.next() + ", ");
// New line
System.out.println();
// Using enhanced for loop for iteration
for (String s : hs)
System.out.print(s + ", ");
System.out.println();
}
}
Geek, For, Geeks, A, B, Z, Geek, For, Geeks, A, B, Z,
LinkedHashSet的方法
Here, E is the type of element stored.
METHOD |
DESCRIPTION |
---|---|
spliterator() | 在此集合中的元素上創建後期綁定和fail-fast Spliterator。 |
Methods Declared in class java.util.AbstractSet
METHOD |
DESCRIPTION |
---|---|
AbstractSet.equals() | 比較指定對象與該集合是否相等。 |
AbstractSet.hashCode() | 返回該集合的哈希碼值。 |
AbstractSet.removeAll() | 從此集合中刪除指定集合中包含的所有元素(可選操作)。 |
Methods declared in class java.util.AbstractCollection
METHOD |
DESCRIPTION |
---|---|
AbstractCollection addAll() | 將指定集合中的所有元素添加到此集合中(可選操作)。 |
AbstractCollection containsAll() | 如果此集合包含指定集合中的所有元素,則返回 true。 |
AbstractCollection retainAll() | 僅保留此集合中包含在指定集合中的元素(可選操作)。 |
AbstractCollection toArray() | 返回一個包含此集合中所有元素的數組。 |
AbstractCollection toArray() | 返回一個包含該集合中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。 |
AbstractCollection toString() | 返回此集合的字符串表示形式。 |
Methods declared in interface java.util.Collection
METHOD |
DESCRIPTION |
---|---|
parallelStream() | 返回一個可能並行的 Stream 並以此集合作為其源。 |
removeIf(謂詞<?超級 E>過濾器) |
刪除此集合中滿足給定謂詞的所有元素。 |
stream() | 返回以此集合作為源的順序 Stream。 |
Methods declared in class java.util.HashSet
METHOD |
DESCRIPTION |
---|---|
HashSet add() | 如果指定元素尚不存在,則將其添加到該集合中。 |
HashSet clear() | 刪除該集合中的所有元素。 |
HashSet clone() | 返回此 HashSet 實例的淺拷貝:元素本身不會被克隆。 |
HashSet contains() | 如果此集合包含指定元素,則返回 true。 |
HashSet isEmpty() | 如果該集合不包含任何元素,則返回 true。 |
HashSet iterator() | 返回此集合中元素的迭代器。 |
HashSet remove() | 從此集合中刪除指定元素(如果存在)。 |
HashSet size() | 返回該集合中的元素數量(其基數)。 |
Methods declared in interface java.lang.Iterable
METHOD |
DESCRIPTION |
---|---|
對 Iterable 的每個元素執行給定的操作,直到處理完所有元素或該操作引發異常。 |
Methods declared in interface java.util.Set
METHOD | DESCRIPTION |
---|---|
Set add() | 此方法用於將特定元素添加到集合中。僅當指定元素尚不存在於集合中時,該函數才添加該元素,否則,如果該元素已存在於集合中,則該函數返回 False。 |
Set addAll() | 此方法用於將提到的集合中的所有元素追加到現有集合中。這些元素是隨機添加的,不遵循任何特定順序。 |
Set clear() | 該方法用於刪除集合中的所有元素,但不刪除集合。該集的參考仍然存在。 |
Set contains() | 該方法用於檢查Set中是否存在特定元素。 |
Set containsAll() | 此方法用於檢查集合是否包含給定集合中存在的所有元素。如果集合包含所有元素,則此方法返回 true;如果缺少任何元素,則返回 false。 |
Set hashCode() | 此方法用於獲取此 Set 實例的 hashCode 值。它返回一個整數值,該值是該 Set 實例的 hashCode 值。 |
Set isEmpty() | 該方法用於檢查集合是否為空。 |
Set iterator() | 該方法用於返回集合的迭代器。集合中的元素以隨機順序返回。 |
Set remove() | 該方法用於從集合中刪除給定的元素。如果指定的元素存在於 Set 中,則此方法返回 True,否則返回 False。 |
Set removeAll() | 此方法用於從集合中刪除集合中存在的所有元素。如果此集合因調用而發生更改,則此方法返回 true。 |
Set retainAll() | 此方法用於保留給定集合中提到的集合中的所有元素。如果此集合因調用而發生更改,則此方法返回 true。 |
Set size() | 該方法用於獲取集合的大小。這將返回一個整數值,表示元素的數量。 |
Set toArray() | 此方法用於生成與 Set 相同元素的數組。 |
toArray?(T[] a) | 返回一個包含該集合中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。 |
以下是兩者的區別LinkedHashMap和 LinkedHashSet:
類別 | LinkedHashMap | LinkedHashSet |
---|---|---|
Operation | 用於存儲鍵值對。 | 用來存放集合的東西 |
Duplicates | 采用唯一且不重複的鍵,但可以采用重複的值 | 不存儲重複元素 |
Implements | HashMap | HashSet |
Example | Map<String, Integer> lhm = new LinkedHashMap<String, Integer>(); | Set<String> lhs = new LinkedhashSet<String>(); |
Note: Keeping the insertion order in both LinkedHashmap and LinkedHashset have additional associated costs, both in terms of spending additional CPU cycles and needing more memory. If you do not need the insertion order maintained, it is recommended to use the lighter-weight HashSet and HashMap instead.
查看您的文章出現在 GeeksforGeeks 的主頁上並幫助其他極客。
相關用法
- Java LinkedHashSet spliterator()用法及代碼示例
- Java LinkedHashSet add()用法及代碼示例
- Java LinkedHashSet clear()用法及代碼示例
- Java LinkedHashSet clone()用法及代碼示例
- Java LinkedHashSet contains()用法及代碼示例
- Java LinkedHashSet containsAll()用法及代碼示例
- Java LinkedHashSet equals()用法及代碼示例
- Java LinkedHashSet hashCode()用法及代碼示例
- Java LinkedHashSet isEmpty()用法及代碼示例
- Java LinkedHashSet remove()用法及代碼示例
- Java LinkedHashSet removeAll()用法及代碼示例
- Java LinkedHashSet retainAll()用法及代碼示例
- Java LinkedHashSet size()用法及代碼示例
- Java LinkedHashSet toArray()用法及代碼示例
- Java LinkedHashSet toString()用法及代碼示例
- Java LinkedHashSet toArray(T[])用法及代碼示例
- Java LinkedHashMap containsValue()用法及代碼示例
- Java LinkedHashMap entrySet()用法及代碼示例
- Java LinkedHashMap forEach()用法及代碼示例
- Java LinkedHashMap getOrDefault()用法及代碼示例
- Java LinkedHashMap keySet()用法及代碼示例
- Java LinkedHashMap values()用法及代碼示例
- Java LinkedHashMap containsKey()用法及代碼示例
- Java LinkedHashMap get()用法及代碼示例
- Java LinkedHashMap removeEldestEntry()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 LinkedHashSet in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。