抱歉,我很久没有使用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);
}
答案 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)
首先,不要使用Vector
或Hashtable
,出于所有实际目的,它们都被视为deprecated
。使用List
或Map
实施。
使用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中对List
和Collection
类进行排序的正确,惯用方法。其他任何事情都表明你不懂语言及其提供的内容。