2016-04-24 47 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); 
      } 
     } 
    } 

}