Java LinkedList remove方法不能正确删除元素

时间:2018-04-06 17:12:17

标签: java linked-list

请注意它是如何以合理的方式删除它们的。它就像是在移动数组中的所有内容,但不仅仅是ArrayLists所做的事情吗?

 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);

提供输出:

[2, 4, 6, 7, 8]

3 个答案:

答案 0 :(得分:5)

是的,LinkedList's remove method有效地将元素索引转移到删除之外。

  

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

删除索引0后:

[2, 3, 4, 5, 6, 7, 8]

删除索引1后:

[2, 4, 5, 6, 7, 8]

删除索引2后:

[2, 4, 6, 7, 8]

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

答案 1 :(得分:1)

来自List.remove()

的文档
  

...将左边的所有后续元素移位......

对于任何实现List接口的类,包括ArrayListLinkedList都必须如此。

答案 2 :(得分:0)

LinkedList不会从示例中检查的第0个索引中删除元素,我也面临这样的问题,您可以使用array.remove(Object)来基于对象哈希码删除元素,这是更安全的选择。

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