HashMap重写(1)HashMap实现了put()方法增加键值对

在这里插入图片描述
马上过年了,很感谢各位小老弟的关注哦
2018年的jdk集合框架专栏还有一些没写完,这几天刚好赶一下,不能再拖了。前面的重写过ArrayList和LinkedList,有木有很有意思呀~ 如果觉得很有意思就对了,接下来我们来拜访下HashMap大爷。

咱们先来分析一下HashMap的数据结构,这里我画了一张图:
在这里插入图片描述
这个图其实很简单,但是实际实现起来就很麻烦了。
HashMap就是数组和链表的结合体,先是根据hash值找到Entry[ ]数组的索引,hash值相等的键值对将会存到同一个数组索引的位置上。然后再根据key值找链表的位置,对应的存到链表的表尾。

很简单有没有,HashMap就这样巧妙的利用了数组方便寻址的优点,也利用了链表方便删除和插入的优点。

我们可以这样理解,数组的作用是先确定一个大概的范围,这样就不用像数组一样,操作一个数,一定要遍历完。然后链表是在数组确定了位置的基础上细分,这样就在一定程度上大大提高了效率! 当然jdk8中,当链表长度大于8,链表会自动变成红黑树。

明人不说暗话,我们先来实现一下put()方法,上代码!!!

package Study.Collection;

/**
 * <p>Description: 自定义一个HashMap
 * 实现了put方法增加键值对,并解决了键重复的时候覆盖相应的节点</p>
 * @author zhangyan
 * @date 2019/1/28 20:07
 */
public class YanHashMap {
   
   

    /**
     * 位桶数组。bucket  array
     */
    Node2[] table;

    /**
     * 存放的键值对的个数
     */
    int size;

    /**
     * 定义构造函数
     */
    public YanHashMap() {
   
   
        //长度一般定义成2的整数幂
        table = new Node2[16];
    }

    /**
     * put方法
     * @param key
     * @param value
     */
    public void put
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值