HashMap集合的整理

1.HashMap底层源码

1.初始容量:16

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

2.最大容量2^30

static final int MAXIMUM_CAPACITY = 1 << 30;

3.加载因子:0.75

static final float DEFAULT_LOAD_FACTOR = 0.75f;

4.树化阈值   ---   当桶(bucket)上的链表数>8时会转成红黑树

static final int TREEIFY_THRESHOLD = 8;

5.链化阈值   ---   当桶(bucket)上的链表数<6时树转链表。

static final int UNTREEIFY_THRESHOLD = 6;

6.树的最小容量:64

static final int MIN_TREEIFY_CAPACITY = 64;

7.继承关系

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {...}

8.扩容原理:n*2

9.通过hash值找到键值对应hash表中的存放位置      (n:桶长度     n总是2的x次方时,hash & (n-1)等价于hash % n,但&比%效率更高

int index = (n - 1) & hash;

10.放置键值时的扩容条件

final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {
     if ((p = tab[i = (n - 1) & hash]) == null)
     ...
     if (++size > threshold)
         resize();
     ...
}

11.避免碰撞的方式

static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

2.方法

1.map.getOrDefault(a,default)

//假设map中含有一个键值对{"name","huang"}
output=map.getOrDefault("name","xiaoming");
此时output="huang",

//假设map为空
output=map.getOrDefault("name","xiaoming");
此时为默认值output="xiaoming"

其他知识点补充:

1.比较两个map集合内容是否相同

//假设已有数据map1和map2
Boolean b = map1.equals(map2);

结果:
但凡map1和map2里的内容一致(排序不一样没有关系),返回true;
否则,返回false

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值