2

オブジェクトの name(String) 変数を長さで並べ替えるカスタム コンパレータを定義しました。

私の人物クラスのコードは次のとおりです。

class MyNameLengthCompare implements Comparator<Person> {

        @Override
        public int compare(Person a, Person b) {
            if(a.getName().length() > b.getName().length()) {
                return -1;
            } else if (a.getName().length() < b.getName().length()) {
                return 1;
            } else
                return 0;
        }

    }

次に、メインメソッドで呼び出しCollections.sort(personList, new MyNameLengthCompare);てから、それを TreeSet に追加しましたmyTreeSet.addAll(personList)

しかし、名前の長さでソートされていません:(

4

3 に答える 3

3

ツリー セットに追加する前に並べ替える必要はありません。重要なのは、ツリー セットにコンパレータがあるかどうかだけです。

于 2011-05-08T04:14:25.650 に答える
1

Comparator を使用して TreeSet を構築しますか? そうでない場合、ツリーはおそらくコンパレータと以前の並べ替えを無視し、Comparable の compareTo メソッドで指定されたコンテンツの自然な並べ替えを使用します。

于 2011-05-08T04:13:51.693 に答える
1

さて、次の問題があると思います:

1) Collections.sort はリストを正しくソートしています。

2) このコレクションを TreeSet に追加すると、もう一度ソートされ、この時点で Person.compareTo(); が使用されます。

3) Comparator を使用しないようにし、Comparable インターフェイスを Person クラスに実装して、コレクションでソートせずに直接ツリーにリストを追加するようにしてください。

于 2011-05-08T04:16:45.790 に答える