hashMap

hashMap

hashMap的散列方式

  1. hashCode取模
  2. 位干扰:hashCode无符号右移16位(hashMap的初始容量只有16)与 hashCode
  3. 实际索引:n-1(15) & hashCod
public class test01 {
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("123","123");

        int index = (Math.abs("123".hashCode())%16);
        System.out.println("index:"+index);
        System.out.println("hashCode:"+"123".hashCode());

        System.out.println("位干扰hash:"+hash("123"));
        System.out.println("位干扰index:"+(hash(hash("123")&15)));
    }

    private static int hash(Object key){
        int h;
        return (key == null) ? 0 :(h = key.hashCode()) ^ (h >>> 16);
    }
}

数据结构

采取 数组+链表 的方式

当某个链表的个数达到8个节点会转换成 红黑树结构存储

红黑树

常见的数据结构 时间复度O(lgn)

红黑树本质上是一颗二叉搜索树,它满足二叉搜索树的基本性质——即树中的任何节点的值大于它的左子节点,且小于它的右子节点。

规则

  • 根节点必须是黑色
  • 不包含连续的红色节点
  • 从任意点到叶子节点的路径黑色节点数相同

数据结构

节点的颜色、左子节点指针、右子节点指针、父节点指针、节点的值 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值