Java 按降序排序整型数组
可能重复:Java 按降序排序整型数组,java,arrays,sorting,Java,Arrays,Sorting,可能重复: 以下代码将按升序对数组进行排序: 我需要按降序排序。我如何使用比较器来实现这一点 请提供帮助。有一种方法可以创建一个由int[]数组支持的列表。您可以将其与Collections.sort一起使用,以将比较器应用于基础数组 List<Integer> integersList = Ints.asList(arr); Collections.sort(integersList, Collections.reverseOrder()); List integersLi
以下代码将按升序对数组进行排序: 我需要按降序排序。我如何使用比较器来实现这一点 请提供帮助。有一种方法可以创建一个由
int[]
数组支持的列表。您可以将其与Collections.sort一起使用,以将比较器应用于基础数组
List<Integer> integersList = Ints.asList(arr);
Collections.sort(integersList, Collections.reverseOrder());
List integersList=Ints.asList(arr);
Collections.sort(integersList,Collections.reverseOrder());
请注意,后者是一个由实际数组支持的实时列表,因此它应该非常有效。如果它不是一个大/长数组,请镜像它:
for( int i = 0; i < arr.length/2; ++i )
{
temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
for(int i=0;i
对于基本数组类型,您必须编写一个反向排序算法:
或者,您可以将int[]
转换为Integer[]
并编写比较器:
public class IntegerComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
}
比较器比较器=新比较器(){
@凌驾
公共整数比较(整数o1,整数o2){
返回o2.compareTo(o1);
}
};
//选择1
整数[]数组=新整数[]{1,24,4,4345};
排序(数组、比较器);
//选择2
int[]array2=新的int[]{1,24,4,4345};
Listlist=Ints.asList(array2);
集合。排序(列表、比较);
array2=整数到数组(列表);
是的。我知道。实际上我想知道是否有一种方法可以使用比较器,而不是原语。Comparator必须实现,因为它是一个接口。如果你要使用镜像进行foreach,我认为使用(int I=array.length-1;I>=0;I--)的负迭代器会简单得多。是的,我知道。实际上我想知道有没有一种方法可以使用Comparator。@android,没有Comparator可以处理对象,不是原语。我的eclipse在上显示错误ArrayUtils@android忘记ArrayUtils,在ConvertPrimitiveArrayToboxTableTypeArray(a1)@android中使用Guavaerror,该方法不存在,这是我创建的一个示例,用于将int[]
转换为Integer[]
。如果我将int转换为Integer,然后我可以使用Collections.reverseOrder,但我必须再次转换为int。这有效吗?我认为最好在array.sort()之后反转数组,然后是两个conversion@android,Arrays.sort()
没有提供在基元数组类型上使用Comparator
的工具,因此我刚刚创建了2转换。第一个“示例用法”是按降序对int[]
进行排序。只需在排序后按降序遍历数组即可。似乎Ints
类位于外部google库中,com.google.common.primitives.Ints
。
public class IntegerComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
}
Integer[] a2 = convertPrimitiveArrayToBoxableTypeArray(a1);
Arrays.sort(a2, new IntegerComparator()); // OR
// Arrays.sort(a2, Collections.reverseOrder());
//Unbox the array to primitive type
a1 = convertBoxableTypeArrayToPrimitiveTypeArray(a2);
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
};
// option 1
Integer[] array = new Integer[] { 1, 24, 4, 4, 345 };
Arrays.sort(array, comparator);
// option 2
int[] array2 = new int[] { 1, 24, 4, 4, 345 };
List<Integer>list = Ints.asList(array2);
Collections.sort(list, comparator);
array2 = Ints.toArray(list);