java零基础开始之位运算与hash

位运算

定义:

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。

public class demoMain {
    public static void main(String[] args) {
        System.out.println(5&5);
        System.out.println(5&6);
        System.out.println(5&7);
        System.out.println(5&8);
    }
}
         /**
         * 运行结果
         * 5  过程:(5&5)->(0101 & 0101 = 0101 ->5)
         * 4  过程:(5&6)->(0101 & 0110 = 0100 ->4)
         * 5  过程:(5&7)->(0101 & 0111 = 0101 ->5)
         * 0  过程:(5&8)->(0101 & 1000 = 0000 ->0)
         */

(and) & 运算原理:

相同位的两个数字都为1,则为1;若有一个不为1,则为0。

public class demoMain {
    public static void main(String[] args) {
        System.out.println(5|5);
        System.out.println(5|6);
        System.out.println(5|7);
        System.out.println(5|8);
        /**
         * 运行结果
         * 5  过程:(5|5)->(0101 | 0101 = 0101 ->5)
         * 7  过程:(5|6)->(0101 | 0110 = 0111 ->7)
         * 7  过程:(5|7)->(0101 | 0111 = 0111 ->7)
         * 13 过程:(5|8)->(0101 | 1000 = 1101 ->13)
         */
    }
}

(or)| 运算原理

相同位只要一个为1即为1。

public class demoMain {
    public static void main(String[] args) {
        System.out.println(5^5);
        System.out.println(5^6);
        System.out.println(5^7);
        System.out.println(5^8);
        /**
         * 0  过程:(5^5)->(0101 | 0101 = 0000 ->0)  
         * 3  过程:(5^6)->(0101 | 0110 = 0011 ->3)
         * 2  过程:(5^7)->(0101 | 0111 = 0010 ->2)
         * 13 过程:(5^8)->(0101 | 1000 = 1101 ->13)
         */
    }
}

(xor) ^ 异或运算 --同为假,异为真

按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0.

其他:

二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

public class demoMain {
    public static void main(String[] args) {
        System.out.println(~5);
        System.out.println(~6);
        System.out.println(~7);
        System.out.println(~8);
          /**
         * -6  过程:(~5)->(0101 ->1010)  
         * -7  过程:(~6)->(0110 ->1001)
         * -8  过程:(~7)->(0111 ->1000)
         * -9  过程:(~8)->(0010 ->1101)
         */
    }
}

not 运算 ~

 

hash

 

hash计算

 

 

hash冲突原因

 

 

解决方法

 

后移法

如果想要放置的key位置被放置了,则将当前的key对应数据放在后面最近的一个位置上。记住,hash的本质就是数组,此时的数组并不是每个位置都是满的,会有空位,这个位置被占了,就往后面一个位置挪就好了。

 

 

链拉法

将对应同一个hash值的key都放在同一个节点后续,使用链表的方式进行保存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值