# Java `LinkedHashSet`示例 > 原文: [https://javatutorial.net/java-linkedhashset-example](https://javatutorial.net/java-linkedhashset-example) Java 中的`LinkedHashSet`类与[`HashSet`](https://javatutorial.net/java-hashset-example)不同,因为其实现维护了所有元素上的双链表。 此链表定义了迭代顺序,即将元素插入到集合中的顺序。 这称为插入顺序。 如果将元素重新插入到集合中,则插入顺序不受其影响。 某些人更喜欢此实现,因为它使用户摆脱了[`HashSet`](https://javatutorial.net/java-hashset-example)提供的未指定且混乱的排序。 ![java-featured-image](img/e0db051dedc1179e7424b6d998a6a772.jpg) ## `LinkedHashSet`的优点 * `LinkedHashSet`维护元素的插入顺序 * 插入,删除和检索操作的时间复杂度为`O(1)`(恒定时间)。 * `LinkedHashSet`允许 1 个`null`元素。 * `LinkedHashSet`使用`equals()`和`hashCode()`,因此可以删除可能的重复元素。 ## 继承图 ![Inheritance diagram of LinkedHashSet](img/8a195dfab57c2ccf0e2850805186b6b4.jpg) `LinkedHashSet`的继承图 ## `LinkedHashSet`中的构造方法 1. `LinkedHashSet()`:初始化一个新的链接哈希集,默认初始容量为 16,负载因子为 0.75。 2. `LinkedHashSet(Collection c)`:使用与指定集合相同的元素初始化一个新的链接哈希集。 3. `LinkedHashSet(int initialCapacity)`:使用指定的初始容量初始化一个新的链接哈希集。 4. `LinkedHashSet(int initialCapacity, float loadFactor)`:使用指定的容量和负载因子初始化一个新的链接哈希集。 ## `LinkedHashSet`中的方法 1. 从类`java.util.HashSet`继承的方法:[`add`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#add(E)),[`clear`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clear()),[`clone`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#clone()),[`contains`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#contains(java.lang.Object)), [`isEmpty`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#isEmpty()) , [`iterator`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#iterator()),[`remove`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#remove(java.lang.Object)),[`size`](https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#size()) 2. 从类`java.util.AbstractSet`继承的方法:[`equals`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#equals(java.lang.Object)), [`hashCode`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#hashCode()) , [`removeAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractSet.html#removeAll(java.util.Collection)) 3. 从类`java.util.AbstractCollection`继承的方法: [`addAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#addAll(java.util.Collection)) , [`containsAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#containsAll(java.util.Collection)) , [`keepAll`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#retainAll(java.util.Collection)) , [`toArray`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray()) , [`toArray(T[])`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toArray(T[])) , [`toString`](https://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString()) 4. 从类`java.lang.Object`继承的方法:[`finalize`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()), [`getClass`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()) ,[`notify`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()), [`notifyAll`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notifyAll()) , [`wait`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()) , [`wait(long)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long)),[`wait(long, int)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long,%20int)) 5. 从接口`java.util.Set`继承的方法: [`add`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#add(E)) , [`addAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#addAll(java.util.Collection)) ,[`clear`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#clear()),[`contains`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)), [`containsAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#containsAll(java.util.Collection)) , [`equals`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#equals(java.lang.Object)), [`hashCode`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#hashCode()) , [`isEmpty`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#isEmpty()) ,[`iterator`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#iterator()),[`remove`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#remove(java.lang.Object)), [`removeAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#removeAll(java.util.Collection)) , [`retainAll`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#retainAll(java.util.Collection)) ,[`size`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#size()), [`toArray`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray()) , [`toArray(T[])`](https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#toArray(T[])) 有关所有方法的文档,请访问 [Oracle 官方文档页面](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html)。 ## 使用`Iterator()`迭代`LinkedHashSet` ```java import java.util.*; class LinkedHashSetExample{ public static void main(String args[]){ LinkedHashSet animals=new LinkedHashSet(); animals.add("Elephant"); animals.add("Tiger"); animals.add("Lion"); Iterator iterator=animals.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } } } ``` **输出:** ```java Elephant Tiger Lion ``` ## 使用`Fo​​r`循环遍历`LinkedHashSet` ```java LinkedHashSet linkedHashSet = new LinkedHashSet(); for (int i = 0; i < linkedHashSet.size(); i++) { System.out.println(linkedHashSet.get(i)); } ``` ## 使用增强`For`循环遍历`LinkedHashSet` ```java for (String temp : linkedHashSet) { System.out.println(temp); } ``` ## 使用`While`循环遍历`LinkedHashSet` ```java int i = 0; while (i < linkedHashSet.size()) { System.out.println(linkedHashSet.get(i)); i++; } ``` ## `LinkedHashSet`的示例程序 ```java import java.util.LinkedHashSet; public class LinkedHashSetExample { public static void main(String[] args) { LinkedHashSet coins = new LinkedHashSet(); // Adding element to LinkedHashSet coins.add("5"); coins.add("10"); coins.add("20"); coins.add("50"); coins.add("100"); // Adding a duplicate would result in no addition of the element coins.add("5"); // Adding another coin value coins.add("75"); System.out.println("Size of the list = " + coins.size()); System.out.println("Original LinkedHashSet:" + coins); System.out.println("Removing 75 from LinkedHashSet: " + coins.remove("75")); System.out.println("Checking if 50 is present=" + coins.contains("50")); System.out.println("Updated LinkedHashSet: " + coins); } } ``` **输出:** ```java Size of LinkedHashSet=5 Original LinkedHashSet:[5, 10, 20, 50, 75, 100] Removing 75 from LinkedHashSet: true Checking if 50 is present=true Updated LinkedHashSet:[5, 10, 20, 50, 100] ```