HashMap:是Map接口最常用的实现类。HashMap中的键不能重复,如果重复,键对应的值被覆盖了;HashMap中的键和值都可以为null;键如果不存在,拿到的是一个null;不支持线程同步,当有多个线程同时写HashMap,可能导致数据不一致,可以使用Collection的synchronizedMap方法使其同步。
Map 接口提供了三种角度来分析 Map:
- KeySet
- Values
- Entry
(1).KeySet
KeySet 是一个 Map 中键(key)的集合,可以通过 Map.keySet() 方法获得,以 Set 的形式保存,不允许重复,因此键存储的对象需要重写 equals() 和 hashCode() 方法。
(2).Values
Values 是一个 Map 中值 (value) 的集合,通过 Map.values() 方法获得,以 Collection 的形式保存,因此可以重复。
(3).Entry
Entry 是 Map 接口中的静态内部接口,表示一个键值对的映射,通过 Map.entrySet() 方法获得的是一组 Entry 的集合,保存在 Set 中,所以 Map 中的 Entry 也不能重复。
Entry 具有的方法:
getKey() , 获取这组映射中的键 key
getValue() , 获取这组映射中的值 value
setValue() , 修改这组映射中的值
hashCode() , 返回这个 Entry 的哈希值
equals() , 对比 key-value 是否相等
源代码:
1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Set; 5 6 public class MapDemo { 7 public static void main(String[] args) { 8 Map<String,String> map=new HashMap<>(); 9 map.put("1","张三"); 10 map.put("2","李四"); 11 map.put("3","王五"); 12 map.put("4","赵六"); 13 map.put("4","赵六"); 14 map.put(null,null); 15 Set set=map.keySet(); 16 Iterator iterator=set.iterator(); 17 while (iterator.hasNext()){ 18 Object s=iterator.next(); 19 Object name=map.get(s); 20 System.out.println("键:"+s+"值:"+name); 21 } 22 } 23 }