2012-10-18 24 views
1

我有一個名爲Dictionary的類,它是一個已排序字符串的集合。該類是TreeSet類的擴展,這意味着它使用比較器進行排序。我想有一個反轉方法來反轉數據集的順序,但是很遺憾這是不可能的,因爲TreeSet在初始化後無法更改它的比較器。作爲解決方法,我嘗試使用原始比較器的反向版本創建新的Dictionary實例,但我無法想出將this指向新對象的任何方法。如何反轉TreeSet實例中數據的順序?

這可能嗎?也許完全不同的解決方案?

public void reverse() { 
    Dictionary reversed = new Dictionary(this, Collections.reverseOrder()); 
    this = reversed; // Obviously not working, but is pretty much what I want to do. 
    reversed.storeOnFile("descending.txt"); 
} 
+1

爲什麼不使用'TreeSet.descendingSet()'? –

回答

3

考慮從您的反向方法返回新的Dictionary

public Dictionary reverse(){ 
    return new Dictionary(this, Collections.reverseOder()); 
} 

或者返回來自該方法的ListSet圖。

1

將您的類從mutable轉換爲immutable。這是你現在在做什麼:

Dictionary dic = new Dictionary(); 
dic.reverse(); 

這是你應該做的:

Dictionary forward = new Dictionary(); 
Dictionary reverse = forward.reverse(); 

一般來說,immutable objects是首選。

+1

如果需要在詞典中添加更多詞彙,該怎麼辦? –