Java: как вставить целое число в HashSet в ArrayList?

#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>());