HashMap底层是 数组+链表 即散列表 或 邻接链表
1.8版本后 数组+链表+红黑树
hashCode方法中
不同的对象 可能 产生相同的hashCode码
不同的hashCode() 一定对应 不同的对象
1.java.util包
2.创建对象
无参数构造方法
带容量的构造方法
带容量和负载因子的构造方法
带(Map<? extends K, ? extends V> m)参数构造方法
3.常用方法
增删改查
增 put(key,value)
添加 存放一组映射关系 key-value
1.key存储的顺序与取得顺序不同
2.不同的key可以存储相同的value
3.key若有相同的 则将原有的value覆盖(跟set刚好相反)
删 E = remove(key); 或 remove(key,value);
删除
改 replace(key,newValue); 或 replace(key,oldValue,newValue);
也可以用put(key.value1) 与 put(key,value2)来改
查 E = get(key);
其他方法
clear();
//清空集合
containsKey(key);
//集合中是否包含key键
containsValue(value);
//集合中是否包含value
isEmpty();
//集合是否为空
putAll(map);
//将另一个集合的元素全部添加进来
getOrDefault(key,defaultValue);
//若key存在就返回value 若不存在就返回defaultValue
putIfAbsent(key,value);
//key若不存在就存入 若存在就不存入
遍历map
方式一:需要获取到所有的key 遍历key 通过key获取value
即 Set
如
HashMap<String,String> map = new HashMap<>();
map.put("小兰","eee");
map.put("小明","bbb");
map.put("小程","aaa");
map.put("小红","ccc");
map.put("小兰","ccc");
map.put("小黑","ddd");
System.out.println(map);
//获取全部key
Set<String> keys = map.keySet();
//迭代器遍历keys
Iterator<String> it = keys.iterator();
while(it.hasNext()){
String key = it.next();
String value = map.get(key);
System.out.println(map.get(key));
}
}
方式二:Set
Map.Entry即entry对象
HashMap<String,String> map = new HashMap<>();
map.put("小兰","eee");
map.put("小明","bbb");
map.put("小程","aaa");
map.put("小红","ccc");
map.put("小兰","ccc");
map.put("小黑","ddd");
Set<Map.Entry<String,String>> entrySet = map.entrySet();//获取全部entry对象
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while(it.hasNext()){
Map.Entry<String,String> entry = it.next();//接收对象
String value = entry.getValue();
String key = entry.getKey();
System.out.println(key+"---"+value);
}