0

ソートされていないリンクリストがあります。それを並べ替えるには、コンパレータを指定して値を TreeSet に入れ、それらの値を新しいリンク リストとして返します。それでも、失敗します。

コンパレータ:

public class SortSpeciesByCommonName implements Comparator<Species> {

    /**
     * a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. 
     */
    @Override
    public int compare(Species arg0, Species arg1) {
        return arg0.getName().compareTo(arg1.getName()); //arg.getName() is String
    }

}

ソート機能:

public static LinkedList<Species> sortedAnimals(LinkedList<Species> animals) {
    TreeSet<Species> sortedBreeds = new TreeSet<Species>(new SortSpeciesByCommonName());
    sortedBreeds.addAll(animals);
    return new LinkedList<Species>(sortedBreeds);
}

値をテストすると、すべてが挿入順に表示されます。

4

2 に答える 2

7

Collections.sort(List、Comparator)を使用してみませんか:

LinkedList<Species> sorted = new LinkedList<Species>(arg);
Collections.sort(sorted, new Comparator<Species>() {
  @Override
  public int compare(Species s1, Species s2) {
      return s1.getName().compareTo(s2.getName());
  }
});

プログラムを実際にデバッグすることはできず、リストがソートされない理由もわかりません。テストケースを提供できますか?の署名はSpecies.getName()何ですか?それStringですか?

于 2009-10-12T02:44:08.517 に答える
1

Collections.sortこれはあなたの質問に直接答えることはありませんが、リストとコンパレータを渡すだけで使用する方が簡単な場合があります。を使用して保存しTreeSetます。

于 2009-10-12T02:44:41.730 に答える