一、Map与collection的区别
Map和collection都是集合的顶层接口,而Map中的每个元素都有两个值
Map集合:第一个值是key
第二个值是value
这两个值是影射的关系,就是每个key值都能找到它唯一的value值
注意:key值不能相同但是value值可以相同
Map接口有两个泛型:K 表示key值
V 表示value值
二、HashMap中的常用方法
1.V put(K key,V value) :向HashMap中添加元素
HashMap map1 = new HashMap();
map1.put("java",1);
System.out.println(map1);
输出结果:
注意:如果添加的key值已经存在,则将该key值中的value值替换成新添加的value值
2.V remove(Object key):删除HashMap中指定key对应的键值对
HashMap map1 = new HashMap();
map1.put("java",1);
map1.put("java2",2);
System.out.println(map1);
map1.remove("java2");
System.out.println(map1);
输出结果:
3.V get(Object key):获得指定key值的value值
HashMap map1 = new HashMap();
map1.put("java",1);
map1.put("java2",2);
System.out.println(map1);
Object java = map1.get("java");
System.out.println(java);
输出结果:
4.int size():获取当前的元素数量
HashMap map1 = new HashMap();
map1.put("java",1);
map1.put("java2",2);
System.out.println(map1);
int size = map1.size();
System.out.println(size);
输出结果:
HashMap原理简析
1.进入put方法中的putVal方法
2.判断数组是否为空,是就初始化数组,否就计算(n - 1 & hash)的值来确定元素在数组中的索引
3.如果计算出的索引上没有值,则将这个元素插入到这个位置,如果计算出的索引上有值了,就产生了hash碰撞
4.判断key值是否相同,相同的话就将原key对应的value值替换,不同的话判断当前节点是否为数节点,是的话放入红黑树,不是的话加入链表
5.判断链表的节点数是否大于8,是的话转换为红黑树,不是的话就判断数组的节点数是否大于阀值,大于就扩容n*2,并迁移数据