使用remove(Object)从LinkedList删除整数

问题描述 投票:0回答:2

我想使用items值从Integer LinkedList中删除一个项目。但是相反,我得到了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作为值。

java collections linked-list doubly-linked-list
2个回答
1
投票

如果查看LinkedList docs,则删除期望索引,要删除的对象或对象本身或没有参数。

remove()检索并删除此列表的头(第一个元素)。

删除(int索引)删除此列表中指定位置的元素。

删除(对象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 primitive


1
投票

您应该使用带有整数对象的版本:

list.remove(new  Integer(10));

,不是将索引作为int数据类型的版本remove

list.remove(10);
© www.soinside.com 2019 - 2024. All rights reserved.