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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。