如何使用Comparator执行此代码?

时间:2011-05-03 17:39:42

标签: java sorting comparator

抱歉,我很久没有使用Java了。我有一个类int类型,我试图这样做,但这不编译:


MySort.sort(vectorOfInt, new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
    return (int)o1 - (int)o2;
    }
    });

我想使用这个方法对int的向量进行排序,使用比较器按升序排序。


public static  void sort(T[] a, Comparator c) {
        sort(a, 0, a.length, c);
}

3 个答案:

答案 0 :(得分:3)

示例代码相当不完整,但首先不能将Object强制转换为int。使用

return (Integer) o1 - (Integer) o2;

代替。

答案 1 :(得分:1)

你可以制作一个typed Comparator,你不需要施放论据。

MySort.sort(vectorOfInt, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
      return o1 - o2;
    }
    });

修改
首先,请不要将数组称为向量。 Vector是一个java类,人们会认为这是你在命名变量vectorOfInt时所使用的。

您获得的编译器错误是因为编译器不知道您的Comparator正在Integer上运行。由于它看到的只是Object,因此它不知道o1实际上是Integer并且可以取消装箱为int。通过指定比较器类型,您可以提供更多信息,并且可以隐式进行转换。

答案 2 :(得分:1)

首先,不要使用VectorHashtable,出于所有实际目的,它们都被视为deprecated。使用ListMap实施。

使用List<Integer>代替,这是将Integer列表作为对象进行操作的现代正确方法。

final List<Integer> list = new ArrayList<Integer>();
... populate list ...
Collections.sort(list);

如果您想使用其他Comparator,则可以使用:

Collections.sort(list, comparator);

由于Integer实现Comparable,默认情况下会按升序对List<Integer>进行排序。 Integer了解详情。

这是在现代Java中对ListCollection类进行排序的正确,惯用方法。其他任何事情都表明你不懂语言及其提供的内容。