假设我有一个Record
类,其中String name
(可以是任何其他类型)属性。在另一个类中,我有一个方法order(List<Record>)
,需要按name
对列表进行排序。为此,我想创建一个自定义无状态Comparator
。我见过三种常用的选项:
静态比较器
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);
}
单例比较器
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);
}
使用Comparator.comparing()
void order(List<Record> records) {
records.sort(Comparator.comparing(Record::getName));
}
假设order()
被大量调用,每种方法的权衡是什么?他们如何比较序列化,线程安全和性能等问题?