制作通用比较器类

我正在尝试制作一个比较器,可以将任何类型的元素进行比较。 我不确定如何创建课程。 我只是想让它比较同一类型的两个元素(但客户端提供它的任何类型,例如:Integer,String,Double等等),以查看哪一个大于另一个。

public class InsertionComparator implements Comparator { /** * Compares two elements. * * @param f1 The first element you want to compare. * @param f2 The second element you want to compare. * @return -1,0,1 Whether or not one is greater than, less than, * or equal to one another. */ public int compare( element1, element2) { if(element1  element2) { return 1; } else { return 0; } } } } 

请帮帮忙,谢谢!

您可以做的最接近的事情是Comparator ,它可以比较实现Comparable接口的任何对象:

 class NaturalComparator> implements Comparator { public int compare(T a, T b) { return a.compareTo(b); } } 

这真的是你能做的最接近的事情:只有Comparable对象具有你试图在这里建模的“自然顺序”。 但通常,一旦有了Comparable对象,就不一定需要 Comparator :例如, Collections.sort可以使用带有ComparatorList或带有Comparable元素的List

  1. 如果没有关于类型的假设,你不能为所有事情编写一个比较器。 你如何处理自定义类? 你怎么决定哪一个大于另一个? 对于更多的野外课程,比较器没有意义。

  2. 另一方面,如果您将自己限制为String,Integer,Double,那么它们是Comparable,您只需使用compareTo()方法编写比较器:

     public int compare(T element1,T element2) { return element1.compareTo(element2); } 

但是你会简单地使用元素的自然顺序,这会破坏使用比较器的目的。 在这些情况下,您通常不需要一个。

我不知道这是否必然有用,但实现一个有意义的通用比较器并非不可能。

多亏了reflection界面,您可以通过类名对对象进行排序。 或者甚至以某种方式通过他们的类层次结构。 例如,父母之后的孩子。

或者您可以根据其toString()方法生成的内容对它们进行排序。 或者hashCode()。 毕竟,每个物体都有它们。

无论你做什么,记得要考虑任何一个元素都可以为null。

我想我们需要知道你需要这个通用比较器。