我有ArrayList<double[]>
我想根据数组中的数字按升序对List进行排序
首先按double[0]
然后按double[1]
...
最后是double[n-1]
,其中n
是双数组的大小
在Java中有没有简单的方法呢?
考虑了一个有4个双数组的arraylist的例子
{1,2,3,4,5}
{2,3,4,5,6}
{0,1,2,3,4}
{0,2,2,3,4}
排序后将是
{0,1,2,3,4}
{0,2,2,3,4}//first element(0=0) is the same, it looks at the second element, and 2>1
{1,2,3,4,5}
{2,3,4,5,6}
它首先会按第一个元素排序,如果它是相同的,它会看到第二个,依此类推。
答案 0 :(得分:4)
您可以使用Arrays.sort
或Collections.sort
来执行此操作,具体取决于您的外部集合是数组还是List
,并使用自定义比较器:
public static <T> void sort(T[] a,
Comparator<? super T> c)
只需在double[]
中编写自定义比较器即可。鉴于Java的面向对象,这将是您编写实现Comparator
的类。
如果您愿意(可能不会)使用指定的比较方法将Comparable
包装在某个包装类double[]
中,则会有类似LexicalDouble
的解决方案。< / p>
private static class Lexical implements Comparator<double[]> {
@Override
public int compare(double[] o1, double[] o2) {
for (int i = 0; i < o1.length && i < o2.length; i++) {
if (o1[i] != o2[i]) {
return o1[i] - o2[i] > 0 ? 1 : -1;
}
}
if (o2.length != o1.length) {
// how to compare these?
return o1.length - o2.length;
}
return 0;
}
}
public static void main(String[] args) {
double[][] a = { { 1, 2 }, { 2, 4 }, { 2, -2 } };
Arrays.sort(a, new Lexical());
}
答案 1 :(得分:1)
您可以使用一种方法:
Arrays.sort();
将指定的数组按数字升序排序。