【问题标题】:Removing Integer from LinkedList using remove(Object)使用 remove(Object) 从 LinkedList 中删除整数
【发布时间】:2020-03-22 15:20:12
【问题描述】:

我想使用 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 作为值删除。

【问题讨论】:

  • 你的问题“...using remove(Object)”已经指向它了,list.remove((Object)10);

标签: java collections linked-list doubly-linked-list


【解决方案1】:

你应该使用接受整数对象的版本:

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

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

list.remove(10);

【讨论】:

  • 不要强制创建一个新的Integer对象,你应该使用自动装箱,即list.remove((Integer)10);list.remove(Integer.valueOf(10));
【解决方案2】:

如果您查看LinkedList docs remove 需要索引、要删除的对象或对象本身或没有参数。

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

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

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

【讨论】:

  • 谢谢。我现在明白了。
猜你喜欢
  • 2021-09-03
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多