質問
うめには、並べ替え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);
}
}
他のヒント
- をSortedMap m、Tの型のオブジェクトにしたい並べ替えを使用
CollationKeys
.利用できるTreeMap
として実施 - 各e要素だしていきたい,
m.put(collator.getCollationKey(e.{getStringYouWantToSortOn}), e);
繰り返し処理を行 m.values()
ばご利回り物-field-list順にソート文字列を使用して CollationKeys
.
このない効率的なものです。
使用コンパレータの代わりに人に匹敵します。御コンパレータで2Persionインスタンスとの比較に基づいて、一部のCollatorインスタンス.呼び出して、
Collections.sort(list, myPersonComparator);
所属していません StackOverflow