如何根据整数数组中的最后一个整数对整数数组的ArrayList进行排序?
ArrayList<int[]> paths = new ArrayList<int[]>();
paths.add(new int[]{0,0,0,0,4});
paths.add(new int[]{0,0,0,0,2});
paths.add(new int[]{0,0,0,0,1});
paths.add(new int[]{0,0,0,0,3});
生成的ArrayList将包含:[0,0,0,1] [0,0,0,2] [0,0,0,3] [0,0,0,4]
答案 0 :(得分:5)
实施Comparator
并使用Collections.sort
。或者同时做两件事:
Collections.sort(paths, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
return (Integer)(a[a.length-1]).compareTo(b[b.length-1]);
}
});
答案 1 :(得分:2)
这是一个带有比较器但不进行自动装箱或铸造的版本:
public class Sorter {
public static void main(String[] args) {
ArrayList<int[]> paths = new ArrayList<int[]>();
paths.add(new int[] { 0, 0, 0, 0, 4 });
paths.add(new int[] { 0, 0, 0, 0, 2 });
paths.add(new int[] { 0, 0, 0, 0, 1 });
paths.add(new int[] { 0, 0, 0, 0, 3 });
Collections.sort(paths, new Comparator<int[]>() {
private static final int INDEX = 4;
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o1[INDEX], o2[INDEX]);
}
});
for (int[] is : paths) {
System.out.println(Arrays.toString(is));
}
}
}
将导致:
[0, 0, 0, 0, 1]
[0, 0, 0, 0, 2]
[0, 0, 0, 0, 3]
[0, 0, 0, 0, 4]
答案 2 :(得分:0)
查看java.util.Collections.sort(List list, Comparator c) ...你需要做的只是写一个Comparator来比较你的两个阵列,剩下的就是小菜一碟。
答案 3 :(得分:0)
首先,在您的代码中,它应该是paths.add(...)
而不是path.add(...)
如果您不想实施Comparator
,您可以自己编写方法。如果效率不重要,这可能会起作用(冒泡排序 - 显然使用更好的排序算法会更好):
public ArrayList<int[]> sort() {
ArrayList<int[]> sortedArray = this;
boolean switched = true;
while(switched) {
switched = false;
for(int i=0; i<sortedArray.size()-1; i++)
int[] a = sortedArray.get(i);
int[] b = sortedArray.get(i+1);
if(a[a.length]>b[b.length]) {
sortedArray.set(i, b);
sortedArray.set(i+1, a);
switched = true;
}
}
return sortedArray;
}
这将通过ArrayList检查每对连续数组的最后一个元素是否顺序正确。如果是这样,它会检查下一对;如果没有,它会将两个数组切换到ArrayList中。它继续通过ArrayList,直到它不再需要进行切换;此时,ArrayList已排序。
答案 4 :(得分:0)
使用Java-8
paths.sort(Comparator.comparingInt(a -> a[a.length - 1]));