我想使用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的List。但我得到了以下例外:
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作为值。
您应该使用接受integer对象的版本:
list.remove(Integer.valueOf(10)));
,而不是将索引作为int数据类型的版本remove
:
list.remove(10);
如果您查看LinkedList文档,remove需要索引、要删除的对象或对象本身,或者不需要参数。
remove((检索并删除此列表的头(第一个元素(。
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基元。