有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

可比Java:使用CollatorKey对集合进行排序

我想实现的是按字符串值对对象集合进行排序。但是,使用collator的方式取决于区域设置。由于性能原因,我不想使用Collator compare()方法(如下代码中所示),而是使用CollationKey类,因为java API声明使用CollationKey要快得多

但是如何使用CollationKey实现compareTo()方法呢?据我所知,如果要使用CollationKey,我必须完全自己编写所有比较方法。所以我甚至不能再使用这些收藏了。排序()方法。。。我非常感谢您提供了一个易于理解的示例,以及一个使用排序键对Person对象集合进行排序的最有效的实现

谢谢!

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);
...

共 (1) 个答案

  1. # 1 楼答案

    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);
      }
    
    }