2009-05-29 67 views
0

如何轻松删除java中链接列表中的重复项?如何轻松删除java中链接列表中的重复项?

+0

我遗漏了一些细节,抱歉,数据结构需要重复释放,排序,并且能够有一个迭代器。 – 2009-05-29 16:22:22

+1

像TreeSet这样的SortedSet将完成所有这些。 – 2009-06-01 20:58:49

+0

@Peter Lawrey - 感谢您的评论,我几天前发现了TreeSet数据结构,这正是我所需要的。 – 2009-06-02 03:29:22

回答

9

我不知道,如果你的要求是使用一个链表,但如果没有,使用一组而不是列表(您标记了一个问题,“最佳实践”)

3

很容易在什么?如果它是一个相当短的列表,最简单的解决方案是将其转储到一个集合,然后回到列表。

myList = new LinkedList<Whatever>(new HashSet<Whatever>(myList)); 

但是为什么要这样呢?如果你不想重复,你应该使用Set;如果您只需要一个列表,以便可以按照插入的顺序保留元素,则可以使用LinkedHashSet来获得两全其美的效果:Set可以像LinkedList那样预测性地迭代。

+0

我同意你在需要Set时不要使用List。您的代码的一个小细节:myList = new LinkedList (new HashSet (myList)); (由于Set是一个接口)。对不起,挑剔^^ – rodion 2009-05-29 16:05:18

2

搜索通过他们,如果两个代表相同的东西,请删除其中的一个。

你还想要什么?你需要建议如何快速做到这一点?如果是这样的话,在查找重复项时将节点存储在散列表中以便于匹配。

1
import java.util.*; 
import java.lang.*; 

class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     Collection<String> c = new LinkedList<String>(); 
     c.add("JAR");c.add("BDK");c.add("JDK");c.add("JAR");c.add("WAR");c.add("APK");c.add("BDK"); 
     c=new HashSet(c); 
     c=new ArrayList(c); 
     for(String s : c) 
     { 
      System.out.println(s); 
     } 
    } 
}