2016-04-24 90 views

回答

1

当您删除第一个项目时,不要停止循环链接列表。循环播放,直到您到达最后并删除您正在查找的物品的每个实例。

+0

但是,删除元素后,索引会被“推”到左侧。这会工作吗?我猜这是他的问题。 – Gendarme

+1

等待您使用LinkedList的标准库实现? 'while(list.remove(object));' – Natecat

+0

如果你'list.remove(index)'以前的索引为'index + 1'的元素现在将它作为'index',对吧? – Gendarme

1

我写了一些测试代码。结果如下。

[11, 21, 5, 5, 31, 41] 
[11, 21, 31, 41] 

这样做的诀窍是从后面到前面迭代列表。这样,你不必担心调整索引。

更简单的方法是使用list.remove(value)方法。但是,如果您在Java对象中检查一个字段而不是Integer,则此方法非常有效,因为我在此示例中正在执行此操作。

package com.ggl.testing; 

import java.util.ArrayList; 
import java.util.List; 

public class ListRemove { 

    public static void main(String[] args) { 
     int[] values = { 11, 21, 5, 5, 31, 41 }; 
     List<Integer> list = createList(values); 
     System.out.println(list); 
     new ListRemove().remove(list, 5); 
     System.out.println(list); 
    } 

    private static List<Integer> createList(int[] values) { 
     List<Integer> list = new ArrayList<>(values.length); 

     for (int index = 0; index < values.length; index++) { 
      list.add(Integer.valueOf(values[index])); 
     } 

     return list; 
    } 

    public void remove(List<Integer> list, int value) { 
     for (int index = list.size() - 1; index >= 0; index--) { 
      if (list.get(index) == value) { 
       list.remove(index); 
      } 
     } 
    } 

}