Появилась необходимость создать HashSet коллекцию с 20 числами от 0 до 20. При создании с помощью кода, написанного ниже, каждый раз создаётся коллекция со случайным количеством элементов из случайных чисел. Подскажите, пожалуйста, почему так? Ведь в цикле указанно создание 20 элементов.
package level8;
import java.util.*;
public class task182_lev8_lec08 {
public static HashSet<Integer> createSet() {
int a = 20;
HashSet<Integer> integerHashSet = new HashSet<>();
for (int i = 0; i < 20; i++){
double random = Math.random() * a;
integerHashSet.add((int) random);
}
return integerHashSet;
}
public static void main(String[] args) {
System.out.println(createSet());
}
}
Дело в HashSet. Если попадаются одинаковые елементы, то он его не добавляет. Просто замените его на List, или добавьте скажем print где нибудь, вы это увидите.
Для того, чтобы оно работало вам нужно сделать так:
int counter = 0;
while (counter < 20) {
double random = Math.random() * a;
if (integerHashSet.add((int) random)) {
counter++;
};
}
Могу предложить такое решение:
private static Set<Integer> getRandomSet(int count) {
return new Random()
.ints(0, 20)
.distinct()
.limit(count)
.boxed()
.collect(Collectors.toSet());
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей