特点:它的所有特点仅与键有关,与值无关
底层原理:与HashSet大体一样
1、首先,会创建一个长度为16,影响因子为0.75的底层数组,利用put方法添加数据
2、put对象底层,是生成一个Entry对象,并利用其键计算出哈希值,计算出在数组中应该存入的索引
3、如果原位置是null直接存入,不是null的话,进行equals比较,键相同的直接覆盖,不相同的话挂在原元素下面
重写Hashcode和equals方法?仅看键,不管值
练习:
import java.util.*;
import java.util.function.BiConsumer;
public class HashMapTest {
public static void main(String[] args) {
//构造随机索引,模拟投票
ArrayList<String> list = new ArrayList<>();
String []arr ={"A","B","C","D"};
Random r =new Random();
for(int i = 0;i<80;i++){
int index = r.nextInt(4);
list.add(arr[index]);
}
//建立键值
HashMap<String,Integer> hm = new HashMap<>();
for (String name : list) {
if (hm.containsKey(name)){
Integer value = hm.get(name);
value++;
hm.put(name,value);
}else {
hm.put(name,1);
}
}
//获取max
int max = 0;
Set<Map.Entry<String, Integer>> entries = hm.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
Integer value = entry.getValue();
if (value>max){
max = value;
}
}
//获取键
for (Map.Entry<String, Integer> entry : entries) {
Integer value = entry.getValue();
if (value==max){
System.out.println(entry.getKey());
}
}
System.out.println(hm);
}
}