2013-02-15 190 views
2

我正在寻找可排序的(我的意思是在初始化后使用Comparator进行多次排序)Java类集合没有重复。有没有比编写代码更纯粹的解决方案,这将是不透明的,并防止例如一些ArrayList用于添加具有相同值已存在的另一个对象?可重复排序的Java集合

编辑1: 我应该添加一些关于排序的解释。我需要用不同的比较器多次分类这组值(实现的多样性)。

回答

7

使用Set!常见的实现是HashSetTreeSet。后者保留物品的顺序,因为它实现SortedSet

+0

很高兴您在那里添加了SortedSet! – RustyBuckets 2013-02-15 03:55:21

+0

你也可以使用SortedMap;) – alfasin 2013-02-15 03:55:45

+0

@alfasin是一个SortedMap的集合吗? – Woot4Moo 2013-02-15 03:55:57

0

这是一个set

用法:

Collection collection = new HashSet(); 
+0

不回答陈述的问题。 – GKFX 2014-07-08 15:05:06

5
Set Interface---->SortedSet Interface----->TreeSet Class 
Set Interface---->HashSet Class 
Set Interface---->LinkedHashSet Class 

可以使用TreeSet。它会删除重复项。

TreeSet实现SortedSet接口,以便将整理元素进入

 SortedSet s=new TreeSet(); 
     s.add(12); 
     s.add(12); 
     s.add(1); 
     s.add(56); 
     s.add(6); 
     s.add(47); 
     s.add(1); 
     System.out.println(s); 

输出

[1, 6, 12, 47, 56] 
+0

您应该提及保持元素排序整个时间的开销。 – Woot4Moo 2013-02-15 03:57:08

+0

@ Woot4Foo引用[javadocs](http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html)“此实现为基本保证了log(n)时间成本操作(添加,删除和包含)“。这听起来不错。 – GKFX 2014-07-08 14:49:08

1

使用设置的独特元素。您可以随时使用Collections.sort ()来排序你使用的任何集合

+1

排序方法的唯一实现方式提供排序列表elemenents: '排序(列表列表中,比较器 C) 排序(列表列表)' – user1964668 2013-02-15 13:06:54

0

可能最好是从头开始扩展标准集合或实施一个集合。例如:

class SetList<E> extends ArrayList<E> { 
    boolean add(E e) { 
    if (contains(e)) { 
     return false; 
    } else { 
     super.add(e); 
     return true; 
    } 
    } 

    void add(int index, E e) { .. } 

    void addAll(..) {..} 

    void addAll(..) {..} 
} 

然后你有Collections.sort如前所述。我想仔细检查一下 - 我可以想象库方法对SetList做出错误的假设,因为它扩展了ArrayList,导致了灾难。阅读ArrayList,List和Collection的javadoc以开始,并真正考虑从头开始。