HashMap
介绍
- (k,v)是一个Ndoe实现了Map.Entry<K,V>
- JDK7.0:HashMap底层为[数组+链表]
- JDK8.0:HashMap底层为[数组+链表+红黑树]
底层源码与HashSet基本相同
底层
- 创建table核心
Node<K,V>[] newTab=(Node<K,V>[])new Node[newCap];
- 替换源码
if(e!=null){
V oldValue=e.value;
if(!onlyIfAbsent||oldValue==null)
e.value=value;
afterNodeAccess(e);
return oldValue;
}
HashTable
介绍
- 存放的元素是键值对:K-V
- HashTable的值与键均不能为空,否则会抛出NullPointerException
- 使用方法基本与HashMap相同
- HashTable是线程安全的,HashMap是线程不安全的
底层
- 底层有数组,初始大小为11
HashTable$Entry[]
- 临界值 threshold=11*0.75=8
- 执行方法
addEntry(hash,key,value,index);//将K-V封装到Entry中
- 扩容
int newCapacity=(oldCapacity<<1)+1;//即二倍加一
Properties
-
继承自HashTable并且实现了Map接口,也是使用一种键值对的形式来保存数据
-
Properties还可用于xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改