创建比较器时,不同方法的权衡是什么?

时间:2015-04-09 18:49:31

标签: java comparator

假设我有一个Record类,其中String name(可以是任何其他类型)属性。在另一个类中,我有一个方法order(List<Record>),需要按name对列表进行排序。为此,我想创建一个自定义无状态Comparator。我见过三种常用的选项:

  1. 静态比较器

    private static final Comparator<Record> STATIC_COMPARATOR = new StaticComparator();
    private static class StaticComparator implements Comparator<Record> {
        @Override
        public int compare(Record m1, Record m2) {
            return m1.getName().compareTo(m2.getName());
        }
    }
    
    void order(List<Record> records) {
        records.sort(STATIC_COMPARATOR);
    }
    
  2. 单例比较器

    private static enum SingletonComparator implements Comparator<Record> {
        INSTANCE;
    
        @Override
        public int compare(Record m1, Record m2) {
            return m1.getName().compareTo(m2.getName());
        }
    }
    
    void order(List<Record> records) {
        records.sort(SingletonComparator.INSTANCE);
    }
    
  3. 使用Comparator.comparing()

    void order(List<Record> records) {
        records.sort(Comparator.comparing(Record::getName));
    }
    
  4. 假设order()被大量调用,每种方法的权衡是什么?他们如何比较序列化,线程安全和性能等问题?

0 个答案:

没有答案