2011-07-15 14 views
0

要素を含むリストがあり、重複を削除したいと思います。私はそれをしようとしましたが、うまくいきませんでした。リストから重複を削除する方法

これはコードです:

//list is the original list containing duplicates 
Iterator it1=list.iterator();//iterator1 
while (it1.hasNext()) 
    { 
    Iterator it2=list.iterator(); //iterator2 
    if(it1.next().equals(it2.next())) 
    { 
     //liststeps is the list without duplicates 
     liststeps.add(it1.next()); 
    } 
    } 
System.out.println("multiple list "+list.toString()); 
System.out.println("list "+liststeps.toString()); 

結果:

multiple list [Open, In Progress, Waiting Customer Test, Closed, Open, Step11, Step22, Open, In Progress, Waiting Customer Test, Closed] 
list [In Progress, Step11, In Progress] 
+0

本当にリストが必要ですか?もしそうでなければ、Tobiaskが示唆したように、あなたは冗長性を許さないセットを使うべきです。 – Raveline

+0

重複除外リストに表示される要素の順序は気になりますか? – NPE

+0

注文が関連している場合は、http://cupi2.uniandes.edu.co/javadoc/j2se/1.5.0/docs/api/java/util/LinkedHashSet.htmlを使用してください。 – Tobias

答えて

1

単にあなたのリストからHashSetまたはTreeSetを構築:

Set<String> s = new HashSet<String>(list); 

これは、重複を削除しますが、可能性の高い要素を注文し直すます。あなたは(ユニーク)の要素が元のリストに表示される順序を保持したい場合は、LinkedHashSetを使用する:あなたがするリストを出力する必要がある場合

Set<String> s = new LinkedHashSet<String>(list); 

最後に、そのようなリストにセットを変換します:

List<String> out = new ArrayList<String>(s); 
5

ではなく、リストのSetを使用してください。 addAll()を使用してリストにセットを追加し、それをリストに戻したり、単にセットを使用したりすることができます。注文が関連している場合は、LinkedHashSetを使用してください。

そして、ちょうど提案:代わりにイテレータのfor-eachを使用して...あなたは、多くの場合、それは常に次の要素に移動するnext方法を呼び出している

0

:-)簡単にit's。

if(it1.next().equals(it2.next())) { 
    liststeps.add(it1.next()); 
} 

このコードは、あなたのリストと比較した次の要素を実際に追加します。

Tobiaskとして指摘されているようにSet/for eachを使用してください。

関連する問題