如何在 Java 中迭代 HashSet?


Java 的 HashSet 类在内部使用哈希表来实现 Set 接口,它使用 HashMap 实例。由于哈希集中元素的迭代顺序并不总是保证的,因此该类不保证元素的顺序会随着时间推移而保持不变。

此类可以包含空元素。哈希函数为基本操作(如添加、删除、包含和大小)提供高效的性能,前提是它能有效地将元素分布到各个桶中。

HashSet 实现 Set 接口,并扩展 AbstractSet。它使用哈希技术创建集合,并将数据存储在哈希表中。哈希是指从键中的数据生成唯一值的流程,该唯一值称为键的哈希码。

使用的方法

以下三种方法之一可以用来迭代 HashSet:

  • 使用迭代器

  • 不要使用迭代器,而是使用 for 循环。

  • 使用 for-each 循环

方法 1:使用迭代器

在此方法中,我们使用迭代器来迭代 HashSet。首先,我们使用 Java 中的 iterator() 方法创建一个迭代器,该方法专门为 HashSet 设计。

语法

Iterator<Integer> it = set.iterator();

接下来,我们使用 Java 的 hasNext() 和 next() 方法遍历 HashSet。next() 方法允许我们检索存储在 HashSet 中的数据,而 hasNext() 方法确定 HashSet 是否包含任何其他元素。

请注意,此方法可用于迭代和操作 HashSet 的元素。

set.add()

以下代码使用 HashSet 存储字符串集合。然后,它使用迭代器遍历 HashSet 并打印每个字符串值。

算法

  • 步骤 1 - 创建一个名为 set 的 HashSet 对象。

  • 步骤 2 - 将字符串“Java”、“PHP”、“Ruby”和“Python”添加到 set 对象中。

  • 步骤 3 - 为 set 对象创建一个名为 itr 的 Iterator 对象。

  • 步骤 4 - 在迭代 itr 对象时,使用 while 循环打印每个元素。

示例

import java.util.*;  
public class HashSetIteratorInstance {  
   public static void main(String[] args) {  
      HashSet<String> set=new HashSet<String>();    
      set.add("Java");    
      set.add("PHP");    
      set.add("Ruby");    
      set.add("Python");   
      
      //Traversing elements    
      Iterator<String> itr=set.iterator();    
      while(itr.hasNext()){    
         System.out.println(itr.next());    
      }    
   }  
}

输出

Java
PHP
Ruby
Python

方法 2:使用 for 循环

要使用改进的 for 循环遍历 Set,无需采取任何特殊步骤;您只需按循环构造的指示使用 Set 即可。

for()

该代码创建一个 HashSet 对象并向其提供字符串。然后,它使用 for 循环遍历 HashSet 对象并打印每个元素。

算法

  • 步骤 1 - 创建“TLP”类。

  • 步骤 2 - 创建一个名为 set 的 HashSet 对象。

  • 步骤 3 - 将字符串“Welcome”、“Tutorialspoint”、“CSE”、“Students”、“for”和“Students”添加到 set 对象中。

  • 步骤 4 - 打印消息“使用 for 循环迭代 HashSet:”。

  • 步骤 5 - 使用 for 循环遍历 set 对象并打印每个元素。

示例

// Java program to iterate the HashSet with the help of for loop
  
import java.util.*;
  
public class TLP {
   public static void main(String[] args){
      HashSet<String> set = new HashSet<>();

      // Addition of data to HashSet
      set.add("Welcome");
      set.add("Tutorialspoint");
      set.add("CSE");
      set.add("Students");
      set.add("for");
      set.add("Students");

      System.out.println("Iterate HashSet with the help of for loop : ");
      for (String ele : set) {
         System.out.print(ele + " ");
      }
   }
}

输出

Iterate HashSet using for loop : 
CSE Students for Welcome Tutorialspoint

方法 3:使用 for each 循环

仅 Java 8 及更高版本支持此功能。由于 Set 实现了 Iterable 接口,因此您可以使用其 forEach() 函数来迭代 Set。

forEach()

该代码创建了一个 HashSet,向其中添加了多个编程语言名称,然后使用 for-each 循环打印 HashSet 中的每个元素。

算法

  • 步骤 1 - 导入 java.util 包。

  • 步骤 2 - 创建一个 HashSet 对象 -“hashset”。

  • 步骤 3 - 现在,您必须将以下字符串添加到 hashset 对象中:“Java”、“Python”、“C sharp”、“PHP”和“Ruby”。

  • 步骤 4 - 打印以下消息:“HashSet 包含:”。

  • 步骤 5 - 使用 for 循环遍历 hashset 对象并打印每个字符串。

示例

import java.util.*;

public class HashSetIteratorInstance {
   public static void main(String args[]) {

      // Declare a HashSet
      HashSet<String> hashset = new HashSet<String>();
      
      // Add elements to HashSet
      hashset.add("Java");
      hashset.add("Python");
      hashset.add("C sharp");
      hashset.add("PHP");
      hashset.add("Ruby");

      System.out.println("HashSet consists of :");
      
      // Using for each loop
      for(String str : hashset){
         System.out.println(str);
      }
   }
}

输出

HashSet consists of :
Java
PHP
C sharp
Ruby
Python

结论

我们讨论了三种在 Java 中迭代 HashSet 的方法:使用迭代器、for 循环或 for-each 循环。迭代顺序没有保证,但所有三种方法都有效。

要在 Java 中迭代 HashSet,您可以使用迭代器,它是一个独特的对象,可帮助您逐个访问集合的元素。

您还可以使用 for 循环迭代 HashSet。但是,它可能不如使用迭代器高效。

最后,您可以使用 for-each 循环迭代 HashSet。

更新于: 2023-10-18

2K+ 次查看

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.