如何从列表中删除重复项

时间:2011-07-15 10:40:43

标签: java

我有一个包含元素的列表,我想删除重复项。我试图这样做,但它没有用。

这是代码:

//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]

3 个答案:

答案 0 :(得分:5)

使用Set代替列表。您可以使用addAll()将列表添加到Set,然后将其转换回List或只使用Set。如果订单相关,请使用LinkedHashSet

只是一个建议:使用for-each而不是迭代器......它更容易: - )

答案 1 :(得分:1)

只需在列表中构建HashSetTreeSet

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

这将删除重复项,但可能会重新排序元素。如果要保留(唯一)元素在原始列表中的显示顺序,请使用LinkedHashSet

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

最后,如果您需要将输出作为列表,请将该集转换为如下列表:

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

答案 2 :(得分:0)

你经常调用next方式,它总是移动到下一个元素。

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

此代码实际上会在您与列表进行比较之后添加下一个元素。

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