制作通用比较器类
我正在尝试制作一个比较器,可以将任何类型的元素进行比较。 我不确定如何创建课程。 我只是想让它比较同一类型的两个元素(但客户端提供它的任何类型,例如: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
可以使用带有Comparator
的List
或带有Comparable
元素的List
。
-
如果没有关于类型的假设,你不能为所有事情编写一个比较器。 你如何处理自定义类? 你怎么决定哪一个大于另一个? 对于更多的野外课程,比较器没有意义。
-
另一方面,如果您将自己限制为String,Integer,Double,那么它们是Comparable,您只需使用compareTo()方法编写比较器:
public int compare(T element1,T element2) { return element1.compareTo(element2); }
但是你会简单地使用元素的自然顺序,这会破坏使用比较器的目的。 在这些情况下,您通常不需要一个。
我不知道这是否必然有用,但实现一个有意义的通用比较器并非不可能。
多亏了reflection界面,您可以通过类名对对象进行排序。 或者甚至以某种方式通过他们的类层次结构。 例如,父母之后的孩子。
或者您可以根据其toString()方法生成的内容对它们进行排序。 或者hashCode()。 毕竟,每个物体都有它们。
无论你做什么,记得要考虑任何一个元素都可以为null。
我想我们需要知道你需要这个通用比较器。