1

我有一个名为 Dictionary 的类,它是排序字符串的集合。该类是 TreeSet 类的扩展,这意味着它使用 Comparator 进行排序。我想有一个反向方法来反转数据集的顺序,但不幸的是这是不可能的,因为 TreeSet 在初始化后无法更改它的 Comparator 。作为一种解决方法,我尝试使用原始 Comparator 的反转版本创建一个新的 Dictionary 实例,但我想不出任何方法来指向this新对象。

这可能吗?也许是一个完全不同的解决方案?

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");
}
4

2 回答 2

3

考虑Dictionary从您的反向方法返回新的。

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

或者从方法中返回一个ListSet视图。

于 2012-10-18T18:13:29.713 回答
1

将您的类从可变的转换为不可变的。这就是你现在正在做的事情:

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

这是你应该做的:

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

一般来说,不可变对象是首选。

于 2012-10-18T18:13:50.047 回答