HashMap详解

HashMap的实现:
1存储方式的不足:
    数组:插入删除困难        
    链表:查询困难 新增删除操作只需要操作当前节点,时间复杂度1;查找操作,遍历整个表,时间复杂度为n 
    注:
        数组:给定下表查找,时间复杂度1;给定值查找,时间复杂度为n;插入删除操作,设计元素的移动,时间复杂度为n
        链表:除了第一个和最后一个元素,每一个元素都有一个前驱和后继,
            组成:
                单链表(当前节点,下一个节点,最后一个节点指向null)
                循环单链表(最后一个节点的指针指向头结点)
                双向链表(一个前驱,当前节点,一个后继)
                循环双向链表(头结点的前驱设置为尾节点,而尾节点的后继设置为头结点)
        二叉树:插入、删除平均复杂度为n
        哈希表:不考虑冲突的情况下,一次定位就可以实现增删改
                哈希表的主干就是数组,查找通过hash函数计算出实际的存储地址,然后将需要的值和对应存储地址的值进行比对,相等就从数组中取出就可以;不相等就和链表的下一个值比对,直到取出相等的值为止
                插入操作通过hash函数找到对应的地址,如果已经存在数值,则在链表中的下一个位置
                
                哈希冲突:
                    
                
        
2解决方案:
    提出hashmap,使用数组+链表的方法,用了链地址法
    hashmap:
        数组;
            主干是一个entry数组,链表则是主要为了解决哈希冲突而存在,每个entry对应的是key-value的键值对
        链表:
3hashmap的实现方法:    
    拉链法(链表的数组)
    继承实现:
        继承abstractMap
        实现map
    构造函数:
        初始容量:
            创建哈希表时的容量
        加载因子:
            容量满的程度
                太大:查找效率低
                太低:稀疏空间浪费
    存储结构:
        数组:
        模拟指针:
实现过程:
    key=null
        putForNullKey
     !=null
        计算key的hash值,搜索table数组
            有元素:
                比较key:
                    相同覆盖
                    不投放链头部                    
            没元素:
                直接保存

数组:
占用内存严重,空间复杂度较高
寻址容易,插入和删除困难

链表:
寻址容易,插入和删除困难
hashMap和hashtable的不同:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值