0

有人看到可以解决这个问题的库吗?默认数组排序无法处理自定义比较器。

4

2 回答 2

1

您只能Comparator在对象上使用。您不能在原始类型上使用。
通过使用ArrayUtils类,您可以将原始数组转换为包装器,反之亦然。
所以使用 Apache Commons ArrayUtils类。

Integer objectArray = ArrayUtils.toObject(array);   
Arrays.sort(objectArray,new MyComparator());
int[] sortedArray = ArraysUtils.toPrimitive(objectArray);
于 2013-09-01T16:32:56.307 回答
0

好吧,这不需要答案,但我想我必须让你明白这背后的原因。

所有的基本数据类型或原始数据类型只能按照它们的自然排序顺序进行比较。这是由语言规范强制执行的。

自然排序:表示一个组在自然界中如何排列的明显方式。例如,如果您考虑自然数,那么1 < 2 < 3 < ... < 10其他原语(例如char等)的情况总是如此。

这也很有意义并有助于优化,因为原始数据类型在语言中的很多地方(如循环计数器、switch 语句等)都使用,并且编译器实际上可以优化很多东西,如果它可以假设一类变量的自然顺序。

还有很多要点,但我相信您知道数组默认排序不为原始数据类型提供自定义比较器的原因。

于 2013-09-01T16:39:57.767 回答