JavaSE的基本内容总结(不定期更新)

i = i++ 或者 i = ++i 的区别

这个其实可以这么理解,都是看 右边的最后的结果 什么意思?
就比如 i = 1; i = i++,i++ 传回来的结果就是 1, 所以 i 打印出来就是 1
你可以理解为 中间是经过了先变为 2(执行了++) 然后在被赋值为 1(执行了 =)
而 i = ++i 也是类似这样的道理,你可以自己去思考思考

    public static void main(String[] args) {
        int i = 1;
        i = i++;
        System.out.println("i = " + i);
        i = ++i;
        System.out.println("i = " + i);
    }

结果
在这里插入图片描述

为什么gap取任意整数, gap / 2 最终等于 1(希尔排序)

使用场景:希尔排序
问题: 为什么 gap 最终等于 1(答案在代码下面)

    /**
     * 希尔排序
     * @param arr
     */
    public static void shellSort(int[] arr) {
        int gap = arr.length;
        while(gap > 1) {
            gap = gap / 2; // 为什么 gap 最终等于 1?
            shell(arr, gap);
        }
    }

    public static void shell(int[] arr, int gap) {
        // 因为每组都要比较 所以是 i++
        for(int i = gap; i < arr.length; i++) {
            int tmp = arr[i];
            int j = i - gap;
            for(; j >= 0; j -= gap) {
                if(arr[j] > tmp) {
                    arr[j + gap] = arr[j];
                } else {
                    break;
                }
            }
            arr[j + gap] = tmp;
        }
    }

答案:
已知
1. 在整数条件下 任何整数 / 2 等价于 任何整数 >>> 1
2. 在大于 1 的任何整数的二进制的最高位都是 1
就可以推出
1. 在满足条件(可以进去该循环)的情况下 最后是 10b 或者是 11b
2. 由 ① 又可以推出 10b/11b >>> 1 等于 1b
所以 gap 最终是为 1

Comparable 与 Comparator 的区别

Comparable 的意思是可以比较的,这是对于自生来说,所以内部的方法是 this.compareTo(O o)
Comparator 的意思是可以比较的类,所以它的内部是 compare(O o1, O o2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值