Java - 集合 - Map
Map
1、Map实现类:HashMap、Hashtable、LinkedHashMap、TreeMap
- HashMap
- 新增元素/获取元素
1 void contextLoads() { 2 //声明 3 Map<String,Object> hashMapOne=new HashMap<>(); 4 5 // .put 添加元素,添加重复的key,不会添加成功,但是会更新key对应的value值 6 hashMapOne.put("name","zhangsan"); 7 hashMapOne.put("name","lisi"); 8 System.out.println(hashMapOne.get("name")); //输出结果是 lisi(替换了原来的zhangsan) 9 10 // .putIfAbsent key存在时,不覆盖原来key的value值,也不新增这个重复的key 11 hashMapOne.put("age","3"); 12 hashMapOne.putIfAbsent("age","10"); 13 System.out.println(hashMapOne.get("age")); //输出结果是3,没有被替换 14 15 // .putall 复制,将所有元素从一个HashMap复制到另一个HashMap 16 Map<String,Object> hashMapTwo=new HashMap<>(); 17 hashMapTwo.put("age","5"); 18 hashMapTwo.put("sex","女"); 19 hashMapTwo.putAll(hashMapOne); 20 //hashMapOne中的age覆盖了hashMapTwo原来的age,输出3 21 System.out.println(hashMapTwo.get("age")); 22 //hashMapOne中没有sex,所以输出hashMapTwo原来的sex,女 23 System.out.println(hashMapTwo.get("sex")); 24 //hashMapOne中的name,复制到了hashMapTwo中,输出lisi 25 System.out.println(hashMapTwo.get("name")); 26 27 // .get获取元素上面的输出语句有 28 // .getOrDefault 当key不存在时,设置一个默认值,输出"上海" 29 System.out.println(hashMapOne.getOrDefault("area","上海"));
- 遍历元素
1 void contextLoads() { 2 //声明 3 Map<String,Object> hashMapOne=new HashMap<>(); 4 hashMapOne.put("name","zhangsan"); 5 hashMapOne.put("age","25"); 6 hashMapOne.put("area","上海"); 7 8 //1、使用keySet获取所有的Key,然后遍历 9 System.out.println("方式1:使用keySet遍历"); 10 for (String key : hashMapOne.keySet()){ 11 System.out.println(key + " " + hashMapOne.get(key)); 12 } 13 14 //2、使用Map.entrySet获取所有的元素,然后使用iterator遍历 15 System.out.println(); 16 System.out.println("方式2:通过Map.entrySet使用iterator遍历"); 17 Iterator<Map.Entry<String,Object>> iterator=hashMapOne.entrySet().iterator(); 18 while (iterator.hasNext()){ 19 Map.Entry<String, Object> entry = iterator.next(); 20 System.out.println("Key:" + entry.getKey() + ",Value:" + entry.getValue()); 21 } 22 23 //3、用Map.entrySet获取所有的元素,然后使用foreach循环遍历 24 System.out.println(); 25 System.out.println("方式3:通过Map.entrySet使用foreach循环遍历"); 26 for (Map.Entry<String, Object> entry : hashMapOne.entrySet()) { 27 System.out.println("Key:" + entry.getKey() + ",Value:" + entry.getValue()); 28 } 29 30 //4、直接使用values获取到所有的值,该种方式无法遍历Key 31 System.out.println(); 32 System.out.println("方式4:使用values遍历,使用这种方式无法遍历Key"); 33 for (Object value : hashMapOne.values()) { 34 System.out.println(value); 35 } 36 }
- 新增元素/获取元素
-
HashMap、Hashtable、LinkedHashMap、TreeMap 的区别
相同点:
-
- 都实现了Map接口
- 都不允许key重复
不同点
不同点 | HashMap | Hashtable | LinkedHashMap | TreeMap |
排序 | 不排序 | 不排序 | 按插入顺序排序 |
有默认排序
【按照key的字典顺序升序排序】
可自定义排序
|
null值 |
Key:允许
Value:允许
|
Key:不允许
Value:不允许
|
Key:允许
Value:允许
|
Key:不允许
Value:允许
|
线程安全 | 非线程安全 | 线程安全 | 非线程安全 | 非线程安全 |
继承的父类 | AbstractMap | Dictionary | HashMap>AbstractMap | AbstractMap |