1

この割り当てでは、ソートされた文字列の ArrayList をパラメーターとして取り、リストから重複を排除するメソッド removeDuplicates を作成します。

たとえば、list という変数に次の値が含まれているとします。

{"be", "be", "is", "not", "or", "question", "that", "the", "to", "to"} 

removeDuplicates(list) を呼び出した後、リストには次の値が格納されます。

{"be", "is", "not", "or", "question", "that", "the", "to"}

ほぼダウンしていますが、何らかの理由で、リストに含まれている場合

["duplicate", "duplicate", "duplicate", "duplicate", "duplicate"] 

2つを除いてすべて削除され、[複製]ではなく[複製、複製]になります

これが私のコードです:

private static void removeDuplicates(ArrayList<String> thing) {
    for (int i = 0; i < thing.size(); i++) { // base word to compare to
        String temp = thing.get(i);

        for (int j = 0; j < thing.size(); j++) { // goes through list for match
            String temp2 = thing.get(j);

            if (temp.equalsIgnoreCase(temp2) && i != j) { // to prevent removal of own letter.
                thing.remove(j);
            }
        }
    }
}
4

3 に答える 3

1

問題は、重複が見つかった場合でも「j++」を実行することです。「thing.remove(j);」を実行したら 基本的にすべてを 1 つのインデックス値にシフトするため、j を増やす必要はありません。

例:

{ duplicate, duplicate, duplicate, duplicate, duplicate }

i iteration 1:
i=0 [dup, dup, dup, dup, dup]
j=0 [dup, dup, dup, dup, dup]
remove=1
j=1 [dup, dup, dup, dup]
remove=2
j=2 [dup, dup, dup]

i iteration 2:
i=1 [dup, dup, dup]
remove=0
j=0 [dup, dup]
j=1 [dup, dup]

[dup, dup]

i iteration 3 stops since 3>size of list.
于 2013-10-09T01:18:15.140 に答える
0

ArrayList のエントリを削除するたびに、そのサイズが減少します。

それthing.size()で減ります。

于 2013-10-09T01:24:14.120 に答える
0

Java Collections のトリックを提供します。 List を Set に変換します。これは、定義上、一意の値のみを保持し、再度 List に変換します。

于 2013-10-09T02:19:36.570 に答える