Map接口

Map接口
格式:Map<k,v>

HashMap
格式:

	HashMap<String,Integer> map = new HashMap<>();

底层实现是数组加链表
HashMap是一个散列表,它存储的内容是键值对(key-value)映射
特点
+无序
+无角标
+k值相同时会被后面的替换掉k所对应的v值
放值

	map.put(String,String)

纵切式遍历

	Set<String> keys = map.keySet();
	for(String k : keys) {
		System.out.println(k + " : " + map.get(k));
	}

横切式遍历

	Set<Entry<String, Integer>> entrySets = map.entrySet();
	for(Entry<String,Integer> entry : entrySets) {
	System.out.println(entry.getKey() + " : " + entry.getValue());
	}

Entry接口
这个接口里面只有一对k&v

扩容
如果没有设置大小时候默认为16;
当容量达到容量大小的0.75倍时,开始扩容;
每次扩容自身的1倍;
扩容后容量 = 扩容前容量 * 2

总结
HashMap底层是数组+链表+树形结构(红黑树);

放值方法

1、用key的哈希值,高位取反,低位亦或,然后用得到的值对16取模从而算出放在那里;
2、如果要放值的地方为null,则直接放在那里;
3、如果要放值的地方为 !null,则放在已有值的next位形成链表;
4、如果链表长度超过8位,且容量大小不足64,则扩容;
5、若容量大小扩容为64,若此时链表长度还超过8位,则转化为树形结构;

扩容过程

1、不赋初值默认为16;
2、当长度达到0.75f的时候开始扩容,每次呈两倍扩容;
eg:扩容后容量大小 = 扩容前容量大小 * 2;
3、有一条链长度大于8位以后变为树形结构;

树形结构

1、在HashMap底层中,采取的树形结构为红黑树;
2、红黑树:顾名思义树形结构有红、黑两种颜色,根节点和尾节点都为黑, 且每条链上的黑色节点数量都相同;
3、红黑树是弱平衡查找树(最长的链长度不超过最短的链的2倍);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值