使用自定义比较器执行基元数组排序的Java库

时间:2013-09-01 16:28:57

标签: java arrays sorting primitive

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

2 个答案:

答案 0 :(得分:1)

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

Integer objectArray = ArrayUtils.toObject(array);   
Arrays.sort(objectArray,new MyComparator());
int[] sortedArray = ArraysUtils.toPrimitive(objectArray);

答案 1 :(得分:0)

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

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

自然排序:意味着群体在自然界中的排列方式。对于例如如果你考虑自然数,1 < 2 < 3 < ... < 10总是如此,其他原语如char等也是如此。

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

还有很多要点,但我确信你得到了Arrays默认排序不为原始数据类型提供自定义Comparator的原因。