Java集合—HashMap
哈希表:是一种通过关键码去寻找值得数据映射映射 的结构
哈希函数的构造方法:直接定址法、除留余数法
处理哈希冲突的方法:处理冲突是指对于一个待插入哈希表的数据元素,若按给定的哈希函数求得的哈希地址已被占用,则按一定规则求下一哈希地址,如此重复,直至找到一个可用的地址以保存该元素
HashMap介绍
public interface Map<K,V>
参数类型
K:此映射所维护的类型
V:映射值的类型
Map接口的特点
Map接口中键和值一一映射,可以通过键值来获取值,给定一个键值对,通过键来访问对应的值,键值对中键值不能重复,value可以重复
HashMap的遍历
以键值遍历
Iterator<Map.Entry<String,String>> iterator=hashMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String,String> entry=iterator.next();
String key=entry.getKey();
String value=entry.getValue();
System.out.println(key+" "+value+" ");
}
System.out.println();
//以键遍历
Iterator<String> iterator1=hashMap.keySet().iterator();
while(iterator1.hasNext()){
System.out.println(iterator1.next()+" ");
}
System.out.println();
//以值遍历
Iterator<String> iterator2=hashMap.values().iterator();
while(iterator2.hasNext()){
System.out.println(iterator2.next()+" ");
}
HashMap的特点
允许key value都为null值
底层数据结构为哈希表,采用数组+链表+红黑树
不保证其内部元素的顺序
初始默认值为16,其容量必须为2的n次方
HashMap底层源码实现
- 类的继承关系
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
继承自AbstractMap,实现AbstractMap中的方法
- 类的成员变量
//默认初始容量 2的幂(2的n次方) 16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
//最大容量 2的30次方
static final int MAXIMUM_CAPACITY = 1 << 30;
//默认加载因子 0.75f
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//Entry数组,长度必须为2的n次幂
transient Entry[] table;
//已储存元素的数量
transient int size;
//下次扩容的临界值(阔值),size>=threshold就会扩容,
//threshold等于capacity*load factor
int threshold;
//加载因子
final float loadFactor;
- 类的构造函数
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <=