基于jdk1.7的HashMap

1.HashMap参数:

DEFAULT_INITIAL_CAPACITY 默认大小为16
DEFAULT_LOAD_FACTOR 加载因子,默认为0.75

2.HashMap扩容机制

1.size > (DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR) = 12,默认情况下,当map容量大于12的情况下进行扩容。每次扩容为当前集合大小的2倍。

2.遍历链表数组(Node<K,V>[] node = null;),获取到key值,根据key值和新数组大小重新计算index下标位置,根据index存储到新的链表数组内。循环链表节点,计算index进行存储到新的数组内,直到nextNode为null。

3.put(key,value);

1.根据key计算hash值,确定下标位置。

2.根据下标获取Node<K,V>对象,如果为空,说明没有发生hash碰撞,直接添加到该下标位置。

   插入key为B的数据

3.如果Node<K,V>对象不为空,说明发生了hash碰撞问题。

     a.判断两个key的值是否相同,如果相同,说明是同一个key,新的value覆盖旧的value。size++

        插入Key为A的值,value为a1。原A的值为a。

     b.两个key的值如果不相同,添加该对象,并且新值的next节点指向旧的值。size++

       插入Key为C的值,value为c

 

4.get(key);

1.根据key和链表数组大小计算index。

2.根据index获取到链表数组内的值。

3.比较key的equals值,如果比较不到,取该值的下个节点进行判断。直到nextNode为null结束。

4.根据key值获取到对应的value。

5.remove(key);

1.根据key和链表数组大小计算index。

2.根据index获取到链表数组内的值。

3.比较两个key的值,如果相同size--

 

   a.如果是头结点,直接把该节点的下个节点变为头结点。table[index]=first.nextNode;

 

   b.如果不是头结点,将该节点的上个节点的nextNode赋值给该节点的下个节点

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值