按字符串逆序排序int[]数组,使用Arrays.sort带Comparator报错如何解决?
解决int[]按元素字符串值逆序排序时Arrays.sort的泛型报错问题
报错原因
你使用的Arrays.sort(nums, Comparator)重载方法仅支持对象类型数组(T[]),而int[]是基本数据类型数组,不属于泛型数组范畴,因此编译器会抛出「no instance(s) of type variable(s) T exist so that int[] conforms to T[]」的类型不匹配错误。
可行解决方案
方案1:装箱为Integer数组后排序(推荐,平衡性能与简洁性)
先将int[]装箱为Integer[],再使用带Comparator的Arrays.sort方法,最后按需转回int[]。这种方式的装箱开销远小于流API的全流程处理,且能利用Arrays.sort的高效双枢轴快排实现:
int[] nums = new int[]{9, 12, 67}; // 将int[]装箱为Integer数组 Integer[] boxedArr = Arrays.stream(nums).boxed().toArray(Integer[]::new); // 按元素字符串值逆序排序 Arrays.sort(boxedArr, (i, j) -> String.valueOf(j).compareTo(String.valueOf(i))); // 若需要转回int[] int[] sortedNums = Arrays.stream(boxedArr).mapToInt(Integer::intValue).toArray();
方案2:手动实现排序逻辑(极致性能场景)
如果完全不想有装箱开销,可以自己基于int[]实现排序算法(比如改编双枢轴快排),直接在排序过程中比较元素的字符串值。以下是一个简单的冒泡排序示例(实际生产建议用快排优化):
int[] nums = new int[]{9, 12, 67}; int length = nums.length; for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - i - 1; j++) { // 逆序比较字符串值 if (String.valueOf(nums[j]).compareTo(String.valueOf(nums[j+1])) < 0) { // 交换元素 int temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } }
总结
如果不是追求极致的零装箱开销,方案1是最优选择——既保留了Arrays.sort的高性能,又能简洁实现按字符串逆序排序的需求。
内容的提问来源于stack exchange,提问作者djy
相关产品推荐
相关产品推荐

