質問

うめには、並べ替えcolletionのオブジェクトをstring値です。しかし、ロケールを利用しcollator.によるパフォーマンス上の理由で私は利用しないのCollatorの比較()メソッドとして以下のコードにお問い合わせくださのCollationKeyが表すstringを返しのクラスは、java APIの利用のCollationKeyが表すstringを返しのほうが格段に速くできます。

い方が分からない実施のcompareTo()メソッドを使用CollationKeyが表すstringを返し?ていると理解できることから、私は完全に書きすべての比較方法を自分でする場合に使用のCollationKeyが表すstringを返します。うまでもないを利用することが可能になります。sort()メソッド...私はとてもthankfullえることがわかりやすく、最も効率的な実装を並べ替えるには、価格収集者による物のCollationKeyが表すstringを返します。

感謝です。

public class Person implements Comparable<Person> {

String lastname;

public int compareTo(Person person) {
     //This works but it is not the best implementation for a good performance
     Collator instance = Collator.getInstance(Locale.ITALY);
     return instance.compare(lastname, person.lastname);
}
}

...
ArrayList list = new ArrayList();
Person person1 = new Person("foo");
list.add(person1);
Person person2 = new Person("bar");
list.add(person2);
Collections.sort(list);
...
役に立ちましたか?

解決

class Person implements Comparable<Person> {

  private static final Collator collator = Collator.getInstance(Locale.ITALY);

  private final String lastname;

  private final CollationKey key;

  Person(String lastname) {
    this.lastname = lastname;
    this.key = collator.getCollationKey(lastname);
  }

  public int compareTo(Person person) {
     return key.compareTo(person.key);
  }

}

他のヒント

  1. をSortedMap m、Tの型のオブジェクトにしたい並べ替えを使用 CollationKeys.利用できる TreeMap として実施
  2. 各e要素だしていきたい, m.put(collator.getCollationKey(e.{getStringYouWantToSortOn}), e);

繰り返し処理を行 m.values() ばご利回り物-field-list順にソート文字列を使用して CollationKeys.

このない効率的なものです。

使用コンパレータの代わりに人に匹敵します。御コンパレータで2Persionインスタンスとの比較に基づいて、一部のCollatorインスタンス.呼び出して、

Collections.sort(list, myPersonComparator);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top