2013-02-15 192 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以開始,並真正考慮從頭開始。