创建泛型比较器类 [已关闭]

2022-09-03 04:44:34

我正在尝试制作一个比较器,可以采用任何类型的元素进行比较。我不确定如何创建类。我只是想让它比较两个相同类型的元素(但是客户端给它的任何类型,例如:整数,字符串,双精度等),看看哪一个比另一个大。

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;
        }
    } 
}
}

请帮忙,谢谢!


答案 1

您可以做的最接近这一点的是可以比较实现接口的任何对象:ComparatorComparable

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

这真的是你能做的最接近的事情:只有对象才具有你在这里尝试建模的“自然排序”。但一般来说,一旦你有了对象,你不一定需要一个:例如,可以取a和,也可以取a和元素。ComparableComparableComparatorCollections.sortListComparatorListComparable


答案 2
  1. 如果不对类型进行一些假设,就无法为所有内容编写单个比较器。您如何处理自定义类?您如何确定哪一个大于另一个?对于野外的更多类,比较器没有意义。

  2. 另一方面,如果您将自己限制为字符串,整数,双精度,那么它们是可比较的,您可以简单地使用compareTo()方法编写比较器:

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

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