原文: https://javatutorial.net/java-linkedhashset-example

Java 中的LinkedHashSet类与HashSet不同,因为其实现维护了所有元素上的双链表。 此链表定义了迭代顺序,即将元素插入到集合中的顺序。 这称为插入顺序。 如果将元素重新插入到集合中,则插入顺序不受其影响。 某些人更喜欢此实现,因为它使用户摆脱了HashSet提供的未指定且混乱的排序。

Java `LinkedHashSet`示例 - 图1

LinkedHashSet的优点

  • LinkedHashSet维护元素的插入顺序
  • 插入,删除和检索操作的时间复杂度为O(1)(恒定时间)。
  • LinkedHashSet允许 1 个null元素。
  • LinkedHashSet使用equals()hashCode(),因此可以删除可能的重复元素。

继承图

Java `LinkedHashSet`示例 - 图2

LinkedHashSet的继承图

LinkedHashSet中的构造方法

  1. LinkedHashSet():初始化一个新的链接哈希集,默认初始容量为 16,负载因子为 0.75。
  2. LinkedHashSet(Collection <? extends E> c):使用与指定集合相同的元素初始化一个新的链接哈希集。
  3. LinkedHashSet(int initialCapacity):使用指定的初始容量初始化一个新的链接哈希集。
  4. LinkedHashSet(int initialCapacity, float loadFactor):使用指定的容量和负载因子初始化一个新的链接哈希集。

LinkedHashSet中的方法

  1. 从类java.util.HashSet继承的方法:add),clear),clone),contains), isEmpty) , iterator),remove),size)
  2. 从类java.util.AbstractSet继承的方法:equals), hashCode) , removeAll)
  3. 从类java.util.AbstractCollection继承的方法: addAll) , containsAll) , keepAll) , toArray) , toArray(T[])) , toString)
  4. 从类java.lang.Object继承的方法:finalize), getClass) ,notify), notifyAll) , wait) , wait(long)),wait(long, int))
  5. 从接口java.util.Set继承的方法: add) , addAll) ,clear),contains), containsAll) , equals), hashCode) , isEmpty) ,iterator),remove), removeAll) , retainAll) ,size), toArray) , toArray(T[]))

有关所有方法的文档,请访问 Oracle 官方文档页面

使用Iterator()迭代LinkedHashSet

  1. import java.util.*;
  2. class LinkedHashSetExample{
  3. public static void main(String args[]){
  4. LinkedHashSet<String> animals=new LinkedHashSet();
  5. animals.add("Elephant");
  6. animals.add("Tiger");
  7. animals.add("Lion");
  8. Iterator<String> iterator=animals.iterator();
  9. while(iterator.hasNext()) {
  10. System.out.println(iterator.next());
  11. }
  12. }
  13. }

输出

  1. Elephant
  2. Tiger
  3. Lion

使用For循环遍历LinkedHashSet

  1. LinkedHashSet<String> linkedHashSet = new LinkedHashSet<String>();
  2. for (int i = 0; i < linkedHashSet.size(); i++) {
  3. System.out.println(linkedHashSet.get(i));
  4. }

使用增强For循环遍历LinkedHashSet

  1. for (String temp : linkedHashSet) {
  2. System.out.println(temp);
  3. }

使用While循环遍历LinkedHashSet

  1. int i = 0;
  2. while (i < linkedHashSet.size()) {
  3. System.out.println(linkedHashSet.get(i));
  4. i++;
  5. }

LinkedHashSet的示例程序

  1. import java.util.LinkedHashSet;
  2. public class LinkedHashSetExample
  3. {
  4. public static void main(String[] args)
  5. {
  6. LinkedHashSet<String> coins =
  7. new LinkedHashSet<String>();
  8. // Adding element to LinkedHashSet
  9. coins.add("5");
  10. coins.add("10");
  11. coins.add("20");
  12. coins.add("50");
  13. coins.add("100");
  14. // Adding a duplicate would result in no addition of the element
  15. coins.add("5");
  16. // Adding another coin value
  17. coins.add("75");
  18. System.out.println("Size of the list = " +
  19. coins.size());
  20. System.out.println("Original LinkedHashSet:" + coins);
  21. System.out.println("Removing 75 from LinkedHashSet: " +
  22. coins.remove("75"));
  23. System.out.println("Checking if 50 is present=" +
  24. coins.contains("50"));
  25. System.out.println("Updated LinkedHashSet: " + coins);
  26. }
  27. }

输出

  1. Size of LinkedHashSet=5
  2. Original LinkedHashSet:[5, 10, 20, 50, 75, 100]
  3. Removing 75 from LinkedHashSet: true
  4. Checking if 50 is present=true
  5. Updated LinkedHashSet:[5, 10, 20, 50, 100]