EN
Java - get random element from set
4 points
xxxxxxxxxx
1
public static String randomStringFromSet() {
2
Set<String> set = new HashSet<>(Arrays.asList("A", "B", "C", "D", "E", "F"));
3
List<String> list = new ArrayList<>(set);
4
5
int size = list.size();
6
int randIdx = new Random().nextInt(size);
7
8
String randomElem = list.get(randIdx);
9
return randomElem;
10
}
Example:
xxxxxxxxxx
1
System.out.println(randomStringFromSet()); // C
2
System.out.println(randomStringFromSet()); // D
3
System.out.println(randomStringFromSet()); // B
Not very efficient because we need to create ArrayList
based on HashSet
.
So if the set is not too large it's ok solution.
xxxxxxxxxx
1
public static String randomStringFromSet2() {
2
Set<String> set = new HashSet<>(Arrays.asList("A", "B", "C", "D", "E", "F"));
3
int size = set.size();
4
5
int currIdx = 0;
6
int randIdx = new Random().nextInt(size);
7
8
for (String letter : set) {
9
if (currIdx == randIdx) {
10
return letter;
11
}
12
currIdx++;
13
}
14
15
return null;
16
}
Example:
xxxxxxxxxx
1
System.out.println(randomStringFromSet2()); // D
2
System.out.println(randomStringFromSet2()); // F
3
System.out.println(randomStringFromSet2()); // E
- Iterate over the set and generate random number within size of the set.
- Iterate over the elements of the set and keep index
- If index is equal to the randomly generated index then return element from set.