📜  如何从Java HashSet 中获取随机元素?

📅  最后修改于: 2022-05-13 01:55:02.596000             🧑  作者: Mango

如何从Java HashSet 中获取随机元素?

与 List 类不同,HashSet 类不提供任何我们可以使用它们的索引获取元素的方法。使用索引很难从中获取随机元素。

我们需要从 HashSet 中获取随机元素,这可以通过以下两种方式之一来完成:

  1. 通过将其转换为数组
  2. 使用迭代器或 for 循环

例子:

Input:


hs.add(11);
hs.add(24);
hs.add(34);
hs.add(43);
hs.add(55);
hs.add(66);
hs.add(72);
hs.add(80);
hs.add(99);


Output:

Random element: 99

方法一:通过转换为数组。

  • 首先将 HashSet 转换为数组,然后从中访问随机元素。
  • 然后我们将创建一个Random类的对象,并调用该类的nextInt()方法,该方法将为我们提供任何小于或等于 HashSet 大小的随机数。
  • 然后使用数组,我们将简单地打印出现在该索引处的元素。
Java
// Java program to get random elements from HashSet
// using an array
  
import java.io.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
        // creating the HashSet
        Set hs = new HashSet();
  
        hs.add(11);
        hs.add(24);
        hs.add(34);
        hs.add(43);
        hs.add(55);
        hs.add(66);
        hs.add(72);
        hs.add(80);
        hs.add(99);
  
        // convert HashSet to an array
        Integer[] arrayNumbers = hs.toArray(new Integer[hs.size()]);
  
        // generate a random number
        Random rndm = new Random();
  
        // this will generate a random number between 0 and
        // HashSet.size - 1
        int rndmNumber = rndm.nextInt(hs.size());
  
        // get the element at random number index
        System.out.println("Random element: "
                           + arrayNumbers[rndmNumber]);
    }
}


Java
// Java program to get random elements from HashSet
// using an Iterator
  
import java.io.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
        Set hs = new HashSet();
  
        hs.add(11);
        hs.add(24);
        hs.add(34);
        hs.add(43);
        hs.add(55);
        hs.add(66);
        hs.add(72);
        hs.add(80);
        hs.add(99);
  
        System.out.println("Random element: "
                           + getRandomElement(hs));
    }
  
    private static 
        E getRandomElement(Set set)
    {
  
        Random random = new Random();
  
        // Generate a random number using nextInt
        // method of the Random class.
        int randomNumber = random.nextInt(set.size());
  
        Iterator iterator = set.iterator();
  
        int currentIndex = 0;
        E randomElement = null;
  
        // iterate the HashSet
        while (iterator.hasNext()) {
  
            randomElement = iterator.next();
  
            // if current index is equal to random number
            if (currentIndex == randomNumber)
                return randomElement;
  
            // increase the current index
            currentIndex++;
        }
  
        return randomElement;
    }
}


输出
Random element: 11

方法 2:使用迭代器或 for 循环

  • 为了从 HashSet 对象中获取随机元素,我们需要生成一个介于 0(包含)和 HashSet 的大小(不包含)之间的随机数。
  • 然后遍历集合,直到我们到达位于随机数位置的元素,如下所示。
  • 在这种方法中,我们将使用迭代器在随机索引处获取元素。

Java

// Java program to get random elements from HashSet
// using an Iterator
  
import java.io.*;
import java.util.*;
  
class GFG {
    public static void main(String[] args)
    {
        Set hs = new HashSet();
  
        hs.add(11);
        hs.add(24);
        hs.add(34);
        hs.add(43);
        hs.add(55);
        hs.add(66);
        hs.add(72);
        hs.add(80);
        hs.add(99);
  
        System.out.println("Random element: "
                           + getRandomElement(hs));
    }
  
    private static 
        E getRandomElement(Set set)
    {
  
        Random random = new Random();
  
        // Generate a random number using nextInt
        // method of the Random class.
        int randomNumber = random.nextInt(set.size());
  
        Iterator iterator = set.iterator();
  
        int currentIndex = 0;
        E randomElement = null;
  
        // iterate the HashSet
        while (iterator.hasNext()) {
  
            randomElement = iterator.next();
  
            // if current index is equal to random number
            if (currentIndex == randomNumber)
                return randomElement;
  
            // increase the current index
            currentIndex++;
        }
  
        return randomElement;
    }
}
输出
Random element: 99