1

私はこのような配列リストを開発しました

ArrayList<String> list = new ArrayList<String>();
list.add("1");
list.add("8");
list.add("8");
list.add("3");
list.add("4");

ここで私の質問は、リストから「8」を削除したい場合、どちらの方法が良いですか?

最初の方法:

for(int i = 0; i < list.size(); i++) {
    if(list.get(i).equals("8")) {
        list.remove(i);
        i--;
    }
}

2番目の方法:

Iterator<String> iterator = list.iterator();
    while(iterator.hasNext())
        if(iterator.next().equals("8"))
            iterator.remove();

ここで、パフォーマンスの観点から、どちらがより効率的で高速であるかを教えてください。また、組み込み関数を使用することで、それほど反復せずに重複を削除できるような方法は他にありますか。

4

3 に答える 3

5

数字のセットだけが必要な場合は、を使用HashSetしてListください。番号を付ける順序を保持する必要がある場合は、を使用しますLinkedHashSetiterator削除に関しては、特定のケースではパフォーマンスが同等である場合でも、常に、が付いたバージョンを優先してください。のイディオムiteratorは、インデックス作成よりも広く適用できます。たとえば、を使用した場合LinkedList、インデックス作成は悲惨なパフォーマンスになります。

于 2012-04-29T07:54:41.307 に答える
3

パフォーマンスに関しては、それらは類似している必要があります。テストしましたか?組み込みのメソッドを使用する場合は、同様のパフォーマンスでこれを行うことができます(テストで確認):

list.removeAll(Arrays.asList("8"));

最後に、重複のないリストが必要な場合は、他の人が述べているようにセットを使用します。

于 2012-04-29T07:55:29.683 に答える
0

重複を保存する必要がある場合Map<Integer,Integer>は、1 番目の整数がキーで、2 番目がキーの出現回数である場所を使用することをお勧めします。したがって、すでに存在するキーを追加すると、対応するカウンターがインクリメントされます。(削除操作では、その逆を行います)。すべての個別の値が必要な場合は、Map.keySet () を使用します。

于 2012-04-29T07:41:02.283 に答える