1

ソートされた文字列のコレクションであるDictionaryというクラスがあります。このクラスはTreeSetクラスの拡張であり、ソートにComparatorを使用することを意味します。データセットの順序を逆にする逆の方法が必要ですが、TreeSetは初期化後にコンパレータを変更できないため、残念ながらこれは不可能です。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());
}

Listまたは、メソッドからまたはSetビューを返します。

于 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 に答える