Появилась необходимость создать 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());
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники