2011-07-15 37 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

你絕對需要一個清單嗎?如果沒有,就像托比亞斯克所建議的那樣,你應該使用一套不會裁員的方案。 – Raveline

+0

您是否關心元素在重複列表中出現的順序? – NPE

+0

如果訂單相關,請使用:http://cupi2.uniandes.edu.co/javadoc/j2se/1.5.0/docs/api/java/util/LinkedHashSet.html – Tobias

回答

1

簡單地構建從列表中HashSetTreeSet

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()將您的列表添加到Set,然後將其轉換回List或僅使用Set。如果訂單相關,請使用LinkedHashSet

而只是一個建議:使用for-each,而不是迭代器...... it's容易:-)

0

你打電話來的時候,它總是移動到下一個元素next方式。

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

該代碼實際上是將您與列表進行比較後的元素添加到下一個元素中。

使用Tobiask指出的Set/for-each。