Java LinkedList remove方法未正确删除元素

Java LinkedList remove方法未正确删除元素,java,linked-list,Java,Linked List,请注意,它并没有以合理的方式删除它们。这就像它改变了数组中的所有内容,但这不是只有ArrayList才会做的吗 public static void main(String[] args) { // create a list of integer to Test our logic. LinkedList<Integer> halfOf = new LinkedList<Integer>(); halfOf.add(1); half

请注意,它并没有以合理的方式删除它们。这就像它改变了数组中的所有内容,但这不是只有ArrayList才会做的吗

 public static void main(String[] args) {

    // create a list of integer to Test our logic.

    LinkedList<Integer> halfOf = new LinkedList<Integer>();
    halfOf.add(1);
    halfOf.add(2);
    halfOf.add(3);
    halfOf.add(4);
    halfOf.add(5);
    halfOf.add(6);
    halfOf.add(7);
    halfOf.add(8);


    halfOf.remove(0);
    halfOf.remove(1);
    halfOf.remove(2);

    System.out.println(halfOf);

从文档中获取

。。。将任何后续元素向左移动

对于实现
列表
接口的任何类,包括
ArrayList
LinkedList
,都必须是这样,这样可以有效地将元素的索引移到已删除的元素之外

删除此列表中指定位置的元素。将任何后续元素向左移动(从其索引中减去一个)。返回从列表中删除的元素

删除索引0后:

[2, 3, 4, 5, 6, 7, 8]
删除索引1后:

[2, 4, 5, 6, 7, 8]
删除索引2后:

[2, 4, 6, 7, 8]

ArrayList
一样,您应该跟踪要删除的索引。删除多个元素的最简单方法是先删除它们的最高索引。

LinkedList
不会从第0个索引中删除元素。您可以通过示例进行检查,我也遇到过这样的问题,您可以使用
数组。删除(对象)
,它基于对象哈希代码删除元素更安全的选项

boolean isRemoved=array.remove(0);
if(!isRemoved) {
    isRemoved = array.remove(array.get((int)(midIndex)));
}

您是否阅读了文档?请提供预期的输出。我预期:[4,5,6,7,8]在这种情况下,删除多个索引的最简单方法是使用
half.subList(0,2).clear()
boolean isRemoved=array.remove(0);
if(!isRemoved) {
    isRemoved = array.remove(array.get((int)(midIndex)));
}