1

これが私のコードです:

public static void deleteDuplicates(ArrayList<String> list){
    ArrayList<String> newList = new ArrayList<String>();
    HashSet<String> set = new HashSet<String>();

    for(int i = 0; i < list.size(); i++){
        set.add(list.get(i));
    }

    newList.addAll(set);
    return newList;
}

これに対する私の入力は次のとおりです。

1, 2, 2, 3, 4, 3, 1, 5, 5, 4, 1, 4, 5

そして、私が得ている出力は次のとおりです。

3, 2, 4, 1, 5

なぜこれが故障しているのか誰かが説明できますか?

4

3 に答える 3

5

HashSetの変更LinkedHashSet

予測可能な反復順序を使用した、Setインターフェイスのハッシュテーブルとリンクリストの実装。

また、常にインターフェースにプログラムすることを忘れないでください:

public static void deleteDuplicates(List<String> list){
    List<String> newList = new ArrayList<String>();
    Set<String> set = new LinkedHashSet<String>();
    //rest of your code
}
于 2013-02-19T03:17:05.173 に答える
1

HashSetクラスのドキュメントからの引用:

セットの反復順序については保証されません。特に、順序が時間の経過とともに一定に保たれることを保証するものではありません。

于 2013-02-19T03:19:08.753 に答える
1

もっと効率的な方法があると思いますが、ここに除去のためのn^2アルゴリズムのアイデアがあります

public static void deleteDuplicates(ArrayList<String> list){
ArrayList<String> newList = new ArrayList<String>();

for (int i = 0; i < list.size(); i++){

boolean exists = false;
String str = list.get(i);
for (int j = 0; j < newList.size(); j++){
if (newList.get(j).compareTo(str)==0){
exists = true;
break;
}
}
if (!exists) newList.add(str);
}
return newList;
}
于 2013-02-19T03:20:36.687 に答える