Map集合的扩充

一,Map底层的实现原理

  1,底层使用的是数组和链表存储数据的

  2,数组是hash表,是通过Map的key的hashCode返回值来定位数据的

         且数组的每一个元素都会对应一个链表(单向链表)

 

  3,数组元素我们称之为bucket(桶),每一个桶对应一个单向链表,链表中存储的Entry对象(Entry对象封装一对key-value)

   4,因为把数据存储在散列桶对应的链表中(链表有多个数据),查询效率低,所以,我们应该避免这种情况,那么就应该重写key对象的hashCode方法(尽可能让不同的key对象的hash值不一样)

  5,DEFAULT_INITIAL_CAPACITY:默认数组容量即桶的数组==16

 

  6,HashMap()

    *无参构造器:在被调用时,数组的初始容量为16

    *加载因子被设置为0.75.也就是说,当存储数据时,如果桶的使用数量为12时,此时,12/16=0.75,就会进行扩容。加载因子如果太小(虽然性能提高了),但是浪费空间,如果太大,不浪费空间,但是性能降低了,0.75是性能与空间作用的一个平衡点

 

  7,**HashSet底层实际上是HashMap+操作

 

二,Map接口的其他实现类;

  1,TreeMap:使用二叉树进行存储key-value

  2,HashTable:比较古老,线程安全,效率低,不能使用null作为key和value

        对应的HashMap线程不安全,但是效率高

  3,LinkedHashMap:底层使用链表来维护key-value的次序

  4,Properties:也是以key-value作为键值对存储信息

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值