二维数组排序(使用Comparable接口) 及LinkedList.add(int index , E element)使用规则

二维数组排序及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()][]);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀太阳a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值