package com.rmq.Map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
*
- 项目名称:集合
- 类名称:MapDemo
- 类描述:
- @version
- Map接口
- 1.键值对储存一组对象
- 2.Key不能重复 Value可以重复
- 3.具体的实现类:HashMap TreeMap Hashtable linkedHashMap
*/
public class MapDemo {
public static void main(String[] args) {
hashMap();
}
private static void hashMap() {
Map<Integer, String> map = new HashMap<>();
map.put(1, "Tom");
map.put(9, "T");
map.put(3, "Jerry");
map.put(4, "J");
System.out.println("size"+map.size());
//从Map中取值
map.get(1);
//从Map中取值,通过key取value
System.out.println(map.get(1));
//1.第一种遍历方法 遍历Entry
Set<Entry<Integer, String>> entrySet = map.entrySet();
for(Entry en: entrySet) {
System.out.println(en.getKey()+"->"+en.getValue());
}
System.out.println();
//2.第二种遍历方法
Set<Integer> keys = map.keySet();
for(Integer i: keys) {
String value = map.get(i);
System.out.println(i+"->"+value);
}
//3.第三种迭代方法 遍历值
Collection<String> values = map.values();
for(String value: values) {
System.out.println(values);
}
}
}
下面是我从别的博主那里复制过来的有助于大家更好的理解
博主大佬介意的话,请给我发信息,我会马上改过来的
HashMap可以接受null键值和值,而HashTable则不能,HashMap是非synchronized的;存储的是键值对。
-
HashMap是基于hashing原理,使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象,当我们给put方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来存储键对象和值对象,作为Map.Entry.
-
如果两个对象hashCode相同:
存储时:他们会找到相同的bucket位置,发生碰撞,因为HashMap使用链表存储对象(每个Map.Entry都有一个next指针),这个Entry会存储在链表中。
获取时:会用hashCode找到bucket位置,然后调用key.equals()方法找到链表中正确的节点.最终找到要找的值对象.
减少碰撞:使用final修饰的对象、或不可变的对象作为键,使用(Integer、String)(是不可变、final的,而且已经重写了equals和hashCode方法)这样的wrapper类作为键是非常好的,(我们可以使用自定义的对象作为键吗?答:当然可以,只要它遵守了equals和hashCode方法定义规则,并且当对象插入到Map中之后将不会再改变。)
-
HashMap负载因子默认是0.75,可设置,当map填满了75%的bucket时候,将会创建原来HashMap大小两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中,这个过程叫做rehashing,因为它调用hash方法找到新的bucket位置。
-
重新调整map大小可能会发生竞争问题:如果两个线程都发现HashMap需要调整大小了,它们都会尝试进行调整,在调整中,存储在链表中的元素的次序会反过来,因为移动bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,这是为了避免尾部遍历,如果条件竞争发生了,就死循环了。
作者:byds520
来源:CSDN
原文:https://blog.csdn.net/lovewebeye/article/details/79573702
版权声明:本文为博主原创文章,转载请附上博文链接!