Удаление Integer из LinkedList с помощью remove (Object) - PullRequest
1 голос
/ 22 марта 2020

Я хочу удалить элемент из Integer LinkedList, используя значение items. Но вместо этого я получаю ArrayIndexOutOfBoundException.

public static void main(String[] args) {

    List<Integer> list = new LinkedList<Integer>();
    list.add(10);
    list.add(20);
    list.add(5);

    list.remove(10);
    System.out.println("Size: " + list.size());

    for (Integer integer : list) {
        System.out.println(integer);
    }
}

Ожидаемый вывод - это список только с 2 элементами 20 и 5. Но я получаю следующее исключение:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 10, Size: 3
at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559)
at java.base/java.util.LinkedList.remove(LinkedList.java:529)
at Collections.LinkedListTest.main(LinkedListTest.java:15)

LinkedList обрабатывает число, которое я передаю, как индекс, а не значение. Итак, как я могу удалить элемент 10 как значение, не используя его индексный номер.

Ответы [ 2 ]

5 голосов
/ 22 марта 2020

Вы должны использовать версию, которая принимает объект целого числа:

list.remove(Integer.valueOf(10)));

, а не версию remove, которая принимает индекс как тип данных int:

list.remove(10);
4 голосов
/ 22 марта 2020

Если вы посмотрите на LinkedList docs delete ожидает, индекс, объект для удаления или сам объект или без параметра.

remove () Извлекает и удаляет голову ( первый элемент) этого списка.

remove (int index) Удаляет элемент в указанной позиции в этом списке.

remove (Object o) Удаляет первое вхождение указанного элемента из этого список, если он присутствует.

В вашем случае, если вы передаете int, он использует метод для удаления объекта с этим индексом, и он должен быть 0, поскольку это первый элемент:

public static void main(String[] args) {

    List<Integer> list = new LinkedList<Integer>();
    list.add(10);
    list.add(20);
    list.add(5);

    list.remove(0);
    System.out.println("Size: " + list.size());

    for (Integer integer : list) {
        System.out.println(integer);
    }
}

Если вы хотите удалить значение, вы должны передать объект ( Integer в этом случае), а не int примитив .

...