Map(1)(自己的笔记)

本人java萌新,因此有不对的地方各位大佬可以直接喷我【手动流泪】

Map:双列数据,粗出key–value对的数据,无序不可重复
Map中的实现类:
HashMap,LinkedHashMap, TreeMap,Hashtable,Properties
HashMap 是常用的一个。线程不安全的,效率高。
Hashtable作为古老的实现类:线程安全,效率低。
Hashtable不能存储unll的key和value
**例如:
public void test(){
Map map =new HashMap();
map.put(null,null);
}
程序不会报异常,而换成Hashtable程序会报空指针异常
**
Porpertise:常用来处理配置文件,key----value都是String类型

**HashMap底层实现原理 jdk7
HashMap map =new HashMa();
实例化以后,底层创建了长度为16的一维数组Entry[] table
map.put(key1,value1);
首先,调用key1所在类的hashcode()计算key1哈希值,哈希值经过某种算法计算以后,得到在数组中的存放位置
如果此位置上的数据为空,此时key1-value1(entry)添加成功
如果此位置上的数据不为空(意味着此位置上存在一个或者多个数据(链表)),比较key1和已经存在的一个或者多个数据的哈希值:
如果key1的哈希值与已经存在的数据的哈希值不同,则添加成功
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~相同了,则比较key1所在类的equals()方法,不同则添加成功,相同 使用value1替换value2(原值被覆盖或者修改)**

HashMap扩容为原来的两倍

HashMap底层实现原理 jdk8
1.new HashMap():底层没有创建长度16的数组
2.jdk 8底层数组是:Node[]
3.首次调用put()方法时,才会开始创建长度为16的数组

虽然学完底层实现原理但是我还是不知道Map开发中啥时候用=.=,满脸懵的听完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值