在 Java 中,Comparator 接口允许客户端为任何类型指定 equals() 和 compare() 方法。Comparator 可以传递给大多数(或者可能是所有)需要排序的集合,并且将使用 Comparator 中的方法而不是指定类的方法。这允许客户端以不同于其自然顺序的方式对对象进行排序,甚至可以对没有自然顺序的对象进行排序(即不实现 Comparable)。
为什么没有类似的哈希接口?它可以指定两种方法,hashCode() 和 equals(),并且对 HashSets 或 HashMaps 很有用,就像比较器对排序很有用一样。
编辑:对于那些将这个问题标记为另一个问题的副本的人,我会提到另一个问题询问为什么 hashCode 包含在每个类中而不是接口中,而这个问题是关于抽象散列函数以允许它的多个实现.
答案编辑:获得此功能的最佳方法似乎是:
- 如果您可以使用外部库和/或已经在使用 Guava(由于很多原因,这是一个很棒的库),Guava 有一个Equivalence类允许这样做。
- 如果您不想使用外部库,则可以使用自定义构建的适配器,类似于此 SO question的最佳答案中所做的。