2016-10-16 3 views
0

私はこれまで何世代もの間これを進めてきました。私は多くの文字列が1つのインデックスにある配列リストを持っています。Arrayリストの索引を削除する

(インデックス0)ブランドである:日産カラーは:ブラックIDである:KL1ドア:4
(インデックス1)ブランドである:フォード色である:赤IDは:LL0ドア:4

ユーザーにIDのみを入力させ、インデックス内のデータ全体を削除する必要があります。 残念ながら、Iteratorはここでは動作しません。どのようにこれを行うことができます任意のアイデア?

+0

を実行していることを行うことができます。これはなぜ代わりに 'ArrayListの'の 'ArrayListの'のですか?そのデータは、あなたが表示するテキストを生成する 'toString()'メソッドを使って '{String brand、String color、String id、int doorCount}'などのプロパティを持つクラスでなければなりません。データを扱う際には、単一の文字列であってはいけません。「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、ドアの4つのメンバーフィールドで、データの各行を表すクラスを作成します。

テキストの各行を解析して、そのクラスのオブジェクトをインスタンス化します。 Listにオブジェクトを収集します。

リストをループし、目的のIDと一致するように各オブジェクトのIDを調べます。

項目の追加/削除の速度を向上させるには、Listの実装としてArrayListではなく、LinkedListを使用します。

+0

イテレータを使用することを選択した場合、O(n)(償却)以外での削除は保証されないため、バッキングデータ構造はほとんど問題になりません。 – Makoto

0

文字列にデータを格納すると、80年代の古き良き時代を思い起こさせます。 Basil Borqueのアドバイスに従って、並行修飾の回避を避けるために配列の最後から始めてください。そうすることで、リストから削除して、前のものではなく次のものに進むことができます(例外が発生する)。

関連する問題