2016-02-17 81 views
-2

考慮一類在此基礎上做的SortedSet排序在JAVA

public Test 
{ 
    int a; 
    int b; 

    Test(int a,int b) { 
     this.a=a; 
     this.b=b 
    } 

    public static void main(String args[]) { 
     Test test1 = new Test(1,2); 
     Test test2 = new Test(2,1); 
     SortedSet<Test> set = new TreeSet<Test>(); 
     set.add(test1); 
     set.add(test2); 
    } 
} 

現在,如果我通過名爲setSortedSet迭代,其中test1test2會更早遇到,爲什麼?

+2

從文檔中的第二句話:「這些元素是使用它們的自然順序進行排序的,或者是通過在有序集創建時提供的比較器進行排序的。」在*請求堆棧溢出幫助之前,請執行研究*。 –

+1

您的'Test'類不是'Comparable '(它不'執行'),也沒有向'TreeSet'構造函數提供'Comparator '的實例。不確定你的意思,或者你的問題是什麼。 –

+0

你有沒有在詢問之前運行你的代碼?我不認爲你的代碼工作。你可以在問之前谷歌搜索嗎?! –

回答

1

當您運行此代碼,因爲您的Test類未實現Comparable<Test>你會得到一個異常(一ClassCastException),所以有一個爲TreeSet,以便用它來保持你的排序元素Test不自然順序。例外情況將發生在set.add(test1)

當使用TreeSet,您必須通過將要素類實現Comparable或使用TreeSet構造函數接受Comparator指定排序。