1.Map接口是Map集合体系的顶级接口
2.Map储存的数据是K-V数据,(K-v数据具有自我描述性)
3.Map的有些子实现K是有序的,有些K是无序的
4.Map不允许存储重复的元素(注意:重复的定义)
5.Map的有些子实现允许存储null,有些不允许
注:有序,null,重复等都是指key,我们不关心value
APIV put(k,v):添加
void putAll():添加所有
v remove(key):根据key删除这个键值对
v get(objec):根据key获取value
boolean containsValue()
boolean containsKey()
视图方法
Set
Collection
set
结构:数组+链表+红黑树
key经过计算得到位置,然后比对key的值,一样就替换,不一样就链上
2.1特点
1.HashMap是Map接口的一个具体子实现
2.HashMap它的结构是数组+链表+红黑树
3.数组默认的初始化容量16,扩容机制扩为原来的二倍,默认加载因子:0.75
4.存储的数据是无序的(通过key计算出的数组下标是不确定的)
5.允许存储null键与null值
6.不允许存储重复的key值
7.线程不安全
8.加载因子是控制该HashMap扩容的阈值,
存储元素数量>加载因此*数组长度
eg:数组长度16,加载因子:0.75,只能存储12个元素(指的是12个entry数量而不是12个下标位置)
9.如果我们给定HashMap一个初始 长度,--构造器赋值(与deque不同先减一了,所以是得到是大于等于给定值的最小的2次幂)
10.key-value数据是如何存储的?
把key取出,根据k计算hash值:
根据hash值与数组长度取模,得到下标
如果下标位置没用存储任何元素,那么就将kv数据创建一个节点(hash,K,V,next)进行存储
如果经过计算的下标位置没又任何元素,那么就new一个节点
如果这个位置已经存储了元素,先判断key是否重复(12)
---待续
)
11.hash值的计算
Hash = (h=key.hashCode())^(h>>>16)
移动16位的原因:我们希望这个hash算法能够尽可能的充分散列,因此,让hashcode的高位也参与到运算之中,下标的位置将取决于低位+高位+数组长度;
12.HashMap中key值重复的依据与条件是:
经过计算得到(Key-->hash-->取模得到下标),此时到一个下标上,就回计算
key的hash值是否一样,在hash一样的基础上,key是否相等,相equals;
Hashhash算法不是加密算法
加密--->(x)解密
加密是为了解密,而Hash为了散列
MD4、MD5、SHA-1、SHA-2



