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
posted @ 2020-02-10 21:02  爱穿新衣服的姑凉  阅读(192)  评论(0编辑  收藏  举报