Dav*_*ave 14 java generics types comparator
我正在尝试制作一个比较器,可以将任何类型的元素进行比较.我不确定如何创建课程.我只是想让它比较同一类型的两个元素(但客户端给它的任何类型,例如:Integer,String,Double等等),看看哪一个大于另一个.
public class InsertionComparator implements Comparator<T>
{
/**
* 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(<T> element1,<T> element2)
{
if(element1 < element2)
{
return -1;
}
else
{
if(element1 > element2)
{
return 1;
}
else
{
return 0;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请帮帮忙,谢谢!
Lou*_*man 25
您可以做的最接近的事情是Comparator可以比较实现该Comparable接口的任何对象:
class NaturalComparator<T extends Comparable<T>> implements Comparator<T> {
public int compare(T a, T b) {
return a.compareTo(b);
}
}
Run Code Online (Sandbox Code Playgroud)
这真的是你能做的最接近的事情:只有Comparable对象具有你想要在这里建模的"自然顺序".但是总体来说,一旦你有了Comparable对象,你不一定需要一个Comparator:例如,Collections.sort可以采取无论是List用Comparator,或List与Comparable元素.
如果没有对类型的假设进行一些假设,你不能为所有东西编写一个比较器.你如何使用自定义类?你怎么决定哪一个大于另一个?对于野外的更多课程,比较器没有意义.
另一方面,如果您将自己限制为String,Integer,Double,那么它们是Comparable,您只需使用compareTo()方法编写比较器:
public int compare(T element1,T element2)
{
return element1.compareTo(element2);
}
Run Code Online (Sandbox Code Playgroud)但是你会简单地使用元素的自然顺序,这会破坏使用比较器的目的.在这些情况下,您通常不需要一个.