如何从Java HashSet 中获取随机元素?
与 List 类不同,HashSet 类不提供任何我们可以使用它们的索引获取元素的方法。使用索引很难从中获取随机元素。
我们需要从 HashSet 中获取随机元素,这可以通过以下两种方式之一来完成:
- 通过将其转换为数组
- 使用迭代器或 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 extends E> set)
{
Random random = new Random();
// Generate a random number using nextInt
// method of the Random class.
int randomNumber = random.nextInt(set.size());
Iterator extends E> 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 extends E> set)
{
Random random = new Random();
// Generate a random number using nextInt
// method of the Random class.
int randomNumber = random.nextInt(set.size());
Iterator extends E> 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