二维数组排序及LinkedList.add(int index , E element)使用规则
1.二维数组排序
先看示例代码
int[][] arr = {{7, 0}, {4, 4},{7, 1},{5, 0},{6, 1},{5, 2}};
for (int i = 0; i < arr.length; i++) {
System.out.println(Arrays.toString(arr[i]));
}
Arrays.sort(arr, ((o1, o2) -> {
if (o1[0] == o2[0]) return o1[1] - o2[1];
else return o2[0]-o1[0];
}));
System.out.println();
for (int i = 0; i < arr.length; i++) {
System.out.println(Arrays.toString(arr[i]));
}
代码解释
/** 假设二维数组中数据代表 [身高,人数]
* 则(int[] o1,int[] o2) ->{}等于(o1,o2)->{}
*
* 二维数组排序
* if (o1[0] == o2[0]) return o1[1] - o2[1];
* else return o2[1]-o1[1];
* o1[0] 0 代表身高,o1[1] 1代表人数.
* 则if判断表示: 身高相同,则按照人数顺序(从小到大),
* 身高不相同,则按身高逆序
*/
代码结果:
未排序
[7, 0]
[4, 4]
[7, 1]
[5, 0]
[6, 1]
[5, 2]
已排序
[7, 0]
[7, 1]
[6, 1]
[5, 0]
[5, 2]
[4, 4]
2.LinkedList.add(int index,E elemnt)//add(索引位置,待插入元素)
示例代码接上述二维数组排序代码后再进行插入
LinkedList<int[]> queue = new LinkedList<>();
for (int[] person : arr) {
queue.add(person[1],person);
}
int[][] res = queue.toArray(new int[arr.length][]);
System.out.println();
for (int i = 0; i < res.length; i++) {
System.out.println(Arrays.toString(res[i]));
}
解释
[7, 1]
[6, 1]
[5, 0]
[5, 2]
[4, 4] 对已排序数组按照数组第二位索引插入,解释为:插入顺序详细过程为
1.[7,0]
2.[7,0],[7,1]
3.[7,0][6,1][7,1]
4.[5,0][7,0][6,1][7,1]
5.[5,0][7,0][5,2][6,1][7,1]
6.[5,0][7,0][5,2][6,1][4,4][7,1]
结果
按照索引位置插入结果
[5, 0]
[7, 0]
[5, 2]
[6, 1]
[4, 4]
[7, 1]
3.List集合如何转换为二维数组
示例:
- 首先创建一维数组的链表, 其次向链表中添加元素, 最后返回链表时转换为二维数组.
public int[][] merge(int[][] intervals) {
List<int[]> res = new LinkedList<>();
res.add(new int[]{1,2});
return res.toArray(new int[res.size()][]);
}