#arraylist #insert #user-input #hashset
#arraylist #вставить #пользовательский ввод #hashset
Вопрос:
Как мне вставить целое число в HashSet в ArrayList, не перезаписывая его?
По какой-то причине метод обновляет все HashSets в моем ArrayList userInput
значением вместо HashSet в ArrayList index
.
Часть метода:
case 15:
System.out.println("n=== ArrayList Test ===n");
ArrayListOfHashSet arrayList = new ArrayListOfHashSet();
// System.out.println("Enter size of ArrayList of HashSet: ");
// int size = scanner.nextInt();
ArrayList<HashSet<Integer>> arrayListOfHashSet = new ArrayList<HashSet<Integer>>(81);
HashSet<Integer> sets = new HashSet<Integer>();
for (int i = 0; i < 81; i ) {
arrayListOfHashSet.add(sets);
}
do {
System.out.println("1. insert value to ArrayList node");
System.out.println("2. remove value from ArrayList node");
System.out.println("3. empty");
System.out.println("4. print");
int choice = scanner.nextInt();
switch (choice) {
case 1:
arrayList.insert(scanner, arrayListOfHashSet);
break;
case 2:
arrayList.remove(scanner, arrayListOfHashSet);
break;
case 3:
arrayList.empty(scanner, arrayListOfHashSet);
break;
case 4:
System.out.println(Arrays.toString(arrayListOfHashSet.toArray()));
break;
}
System.out.println("nDo you want to continue? (y or n) n");
c = scanner.next().charAt(0);
} while ((c == 'Y' || c == 'y') amp;amp; (c != 'N' || c != 'n'));
break;
Мой метод вставки:
public void insert(Scanner scanner, ArrayList<HashSet<Integer>> arrayListOfHashSet) {
System.out.print("Please enter an index: ");
int index = scanner.nextInt();
HashSet<Integer> hashSet = arrayListOfHashSet.get(index);
System.out.print("Please enter a value: ");
int userInput = scanner.nextInt();
hashSet.add(userInput);
arrayListOfHashSet.set(index, hashSet);
}
Комментарии:
1. Пожалуйста, предоставьте исходный код о том, как вы заполняете ArrayList.
2. @Karthik хорошо, вот и все 🙂
Ответ №1:
HashSet<Integer> sets = new HashSet<Integer>();
for (int i = 0; i < 81; i ) {
arrayListOfHashSet.add(sets);
}
Вы добавляете один и тот же экземпляр HashSet ко всем индексам ArrayList. Поскольку это ссылка, это тот же hashset, который присутствует во всех индексах.
Вам нужно будет изменить arrayListOfHashSet.add(sets);
на arrayListOfHashSet.add(new HashSet<Integer>());