java集合之实现Map接口的类--Java笔记

本文详细介绍了Java中Map接口的常见实现类,包括HashMap的扩容机制、Hashtable的特点、Properties的用途、LinkedHashMap的有序性以及TreeMap的排序特性。还对比了Hashtable和HashMap的区别。
摘要由CSDN通过智能技术生成

目录

Map接口常用实现类

一.HashMap

HashMap的扩容机制

二.Hashtable

三.Properties (继承 Hashtable)

四.LinkedHashMap (继承 HashMap)

五.TreeMap

六.Hashtable 和 HashMap 对比


Map接口常用实现类

一.HashMap

①.HashMap 是 Map 接口使用频率最高的类

②.HashMap是以 Key-value 的方式来存储数据的

③.Key 是不可以重复的且只能存放一个null,val 可以重复可以存放多个null 

④.添加相同的 Key,会覆盖原来的 Key-value

⑤.HashMap 是线程不安全的

HashMap的扩容机制

①.HashMap 底层为一个Node类型的数组 table ,默认为null

②.当添加元素时,先通过Key的hashcode计算出在table 的索引值,然后判断该索引处是否有元素,如果没有元素直接添加。如果有元素判断该元素和要添加的元素Key是否相等,相等则替换 value,不相等需要判断是树还是链表并作出相应处理。添加时发现容量到达临界值还需要扩容

③.第一次添加时.table 扩容到 16,临界值为12

④.之后扩容时,为table 容量的 2倍,临界值也应为 2 倍

⑤.如果一条链表的元素个数 超过 8,并且 table 大小 大于等于 64 ,链表会进行树化,table 大小 小于64会先扩大 table 的大小

以HashSet为例(hashSet底层为HashMap):

当一条链表的元素个数为8,添加第九个元素时

 扩容前的数组:

 

 

 进入putVal()方法 table 不等于null、n等于16、p等于tab[10]不为null、进入else,key不相同、p不是TreeNode的对象实例进入else,

 进入for循环,经过循环后将新元素添加到了链表后面,此时binCount等于7,进入if语句

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值