Ash*_*lla 1 java collections linked-list doubly-linked-list
我想使用 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我期望的输出是一个只有 20 和 5 2 个元素的列表。但我得到以下异常:
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)
Run Code Online (Sandbox Code Playgroud)
LinkedList 将我传递的数字视为索引而不是值。那么如何在不使用其索引号的情况下将项目 10 作为值删除。
您应该使用采用整数对象的版本:
list.remove(Integer.valueOf(10)));
Run Code Online (Sandbox Code Playgroud)
,而不是将remove索引作为 int 数据类型的版本:
list.remove(10);
Run Code Online (Sandbox Code Playgroud)
如果您查看LinkedList 文档, remove 需要索引、要删除的对象或对象本身或没有参数。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想删除一个值,你应该传递一个对象(在本例中为Integer),而不是int 原语。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |