2017-01-09 4 views
0
Set<ArrayList<Integer>> hs = new HashSet<ArrayList<Integer>>(); 

    ArrayList<Integer> arr = new ArrayList<Integer>(); 

    arr.add(1); 
    arr.add(2); 
    arr.add(3); 
    arr.add(4); 

    hs.add(arr); 

    ArrayList<Integer> arr1 = new ArrayList<Integer>(); 

    arr1.add(4); 
    arr1.add(3); 
    arr1.add(2); 
    arr1.add(1); 

    hs.add(arr1); 

    System.out.println(hs.size()); 

Выход, который я получаю, равен 2. Я хочу получить 1, поскольку оба элемента массива имеют одинаковые элементы. Как я могу это достичь?Набор архаристов в Java

+7

Это опечатка. Вы добавляете 'arr' вместо' arr1'. – shmosel

+0

Я установил опечатку и изменил порядок элементов. Я все равно получаю 2. Однако, если элементы имеют одинаковый порядок, тогда он дает 1. Но мне нужно, чтобы он работал для любого заказа. –

+0

Теперь вы задаете отдельный вопрос. Списки упорядочиваются по определению. Если вам нужно неупорядоченное сравнение, используйте набор. – shmosel

ответ

-2

Даже если содержимое одинаковое, оба arraylists - разные объекты. Вы должны увидеть 2 элемента в наборе.

Её любят иметь двух сотрудников с точно таким же именем.

Не уверен, что вы можете реализовать метод equals для arraylists.

+1

Это неверно; 'ArrayList.equals()' и 'ArrayList.hashCode()' вычисляются на основе элементов в списке, а не экземпляра объекта. –

2

Во втором блоке, после создания arr1, вы добавляете число от 1 до 3 в положение . Очевидно, что ArrayList с 8 элементами не равно пустой ArrayList, поэтому у вас должно быть два члена в HashSet. Если вы исправите код для добавления тех же элементов в arr1, вы получите HashSet с размером 1.

0

В введенном вами коде вы добавляете 1, 2, 3 и 4 в первый список (arr) дважды и ничего не добавляет ко второму списку (arr1). Таким образом, arr1.equals(arr) будет ложным.

Исправить опечатку в коде так, чтобы arr1 содержит те же элементы, что и arr, и вы достигнете своей цели.

Смежные вопросы