2016-10-16 70 views
0

我一直在爲此工作了很多年。我有一個數組列表,其中許多字符串在一個索引中。數組列表刪除索引

(索引0)品牌是:日產顏色是:黑色ID是:KL1門是:4
(索引1)品牌是:福特顏色是:紅色ID是:LL0門是:4

我希望用戶只輸入ID,它應該刪除索引中的全部數據。 不幸的是迭代器不會在這裏工作。任何想法如何做到這一點?

+0

爲本:這是爲什麼一個ArrayList的'',而不是一個ArrayList的''?該數據應該是一個具有屬性'{String品牌,字符串顏色,字符串id,int doorCount}'或類的類,帶有'toString()'方法來生成您顯示的文本。在使用數據時,它不應該是單個字符串......在id上移除變得幾乎簡單得多。 –

回答

0

您應該創建將包含這些數據相關的車的類。以下面的代碼爲例。我已經使用內部遍歷列表的Java 8功能。

public class Main { 
public static void main(String[] args){ 
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"), 
      new Car("Ford", "Red", "LL0", "4"))); 

    String id = "KL1"; 
    list.removeIf(i -> i.getID().equals(id)); 
    list.forEach(System.out::println); // show the list after operation 
} 

static class Car { 
    public final String Brand; 
    public final String Colour; 
    public final String ID; 
    public final String Door; 

    public Car(String brand, String colour, String ID, String door) { 
     Brand = brand; 
     Colour = colour; 
     this.ID = ID; 
     Door = door; 
    } 

    public String getBrand() { 
     return Brand; 
    } 

    public String getColour() { 
     return Colour; 
    } 

    public String getID() { 
     return ID; 
    } 

    public String getDoor() { 
     return Door; 
    } 
} 

} 

更新

你也可以做,通過這樣

public static void main(String[] args){ 
    List<Car> list = new ArrayList<>(Arrays.asList(new Car("Nissan", "Black", "KL1", "4"), 
      new Car("Ford", "Red", "LL0", "4"))); 

    String id = "KL1"; 
    // Following code will find and remove the match from the list. 
    // this for loop do exactly what it is doing "list.removeIf(i -> i.getID().equals(id));" 
    for (int i = 0; i < list.size(); i++) { 
     if (list.get(i).getID().equals(id)) { 
      list.remove(i); 
      break; 
     } 
    } 
} 
+0

這是用這個代碼得到的輸出[Car @ 15db9742,Car @ 6d06d69c] – tomaszsvd

3

OOP

使用基本的面向對象的方法。

創建一個類來表示每一行數據,包含四個成員字段:品牌,顏色,ID,門。

解析每行文本以實例化該類的一個對象。在List中收集對象。

循環列表並詢問每個對象的id以匹配您想要的id。

對於添加/刪除項目的速度,請使用LinkedList而不是ArrayList作爲List的實施。

+0

如果選擇使用迭代器,那麼由於除O(n)(攤銷)以外的任何其他操作都不能保證清除(至少)清除,所以後備數據結構幾乎不起作用。 – Makoto

0

將數據存儲在字符串中讓我想起了80年代的美好時光。遵循Basil Borque的建議,然後爲了避免併發修改的失敗,從數組的末尾開始。這樣,你可以從列表中刪除,並繼續前一個,而不是下一個(這將導致異常)