容器-Map接口、HashMap(十五)

容器-Map接口、HashMap(十五)

  1. Map接口:定义了双例集合对的存储特征,它并不是Collection接口的子接口。双例集合的存储特征以key与value结构为单位进行存储,体现的是数学中的y=f(x)概念。

  2. Map和Collection的区别:

    • Collection中的容器,元素是孤立存在的(理解为单身),向集合中存储元素采用一个元素的方式存储。
    • Map中的容器,元素是成对存在的(理解为现代社会的夫妻),每个元素由键和值两部分组成,通过键可以找对所对应的值
    • Collection中的容器称为单例集合,Map中的容器称为双例集合
    • Map中的集合不能包含重复的键,值可以重复每个键只能对应一个值。
    • Map中常用的容器为HashMap、TreeMap等
  3. HashMap的一些常用方法
    在这里插入图片描述

  4. HashMap的一些常用方法的具体实现

    • 添加元素

      import java.util.HashMap;
      import java.util.Map;
      
      public class HashMapTest {
          public static void main(String[] args) {
              //实例化HashMap容器
              Map<String,String> map=new HashMap<>();
              //添加容器
              map.put("a","A");//用put(K,V)添加元素,并且返回V的值,V为空时,返回的是null,
              String value=map.put("a","B");//K(键)相同时,新的V值会覆盖旧的V,返回的是被覆盖的旧的V
              System.out.println(value);
      
      
          }
      }
      
    • 获取元素方式一,通过get方法获取元素。

       //通过K获取value的方法
              String val = map.get("a");//缺点:1.当HashMap有很多元素时,我们需要调用多次get方法
              System.out.println(val);//       2.假如我们不知道有哪些K,通过get方法就无法获取
                                      //优点:1.通过已知的Key来获取Value,get方法是很方便的
      
    • 获取元素方式二,通过KeySet方法获取元素,可以解决get方法的两个缺点。

          map.put("b","B");
          map.put("c","D");
          map.put("d","D");
          map.put("e","E");
          //获取HashMap容器中有的元素,可以使用KeySet方法与get方法一并完成
          Set<String> keys=map.keySet();//KeySet方法获取所有的Key,放在一个Set集合里
          for (String key:keys){//遍历所有的Key
              String v1=map.get(key);//通过get方法是通过每个Key,去获取Value
              System.out.println(key+"----"+v1);//在Map接口中,Key一定要不同,Value可以相同
          }
      
      
    • 获取元素方式三,通过entrySet方法获取Map.Entry类型获取元素。

      //这个entrySet方法可以返回一个Set集合,Set所存放的类型是Map.Entry类型
      //Map.Entry类型是:Entry接口继承Map,所以Entry是内部接口,Entry内部接口提供了两个方法,分别是getKey()、getValue() 获取K和V的值。Map外部接口调用Entry是内部接口的方法就要用Map.Entry
      //Map本身就是K-V的结构,而Entry类型就是一个K-V,entrySet方法返回的Set集合里就是存取多个K-V(键值对)
              Set<Map.Entry<String,String>> entrySet=map.entrySet();
              for (Map.Entry<String,String> entry:entrySet){
                  String key=entry.getKey();
                  String v=entry.getValue();
                  System.out.println(key+"------------------"+v);
              }
      
    • 并集操作

        //并集操作
              System.out.println("------------------------------");
              Map<String,String> map2=new HashMap<>();
              map2.put("f","F");
              map2.put("c","cc");//当Key相同,value不同时,被并集的集合中的V,会覆盖并集的集合中的V
              map2.putAll(map);//map2去并集map
              //通过第二种keySet()方法获取元素
              Set<String> keys2=map2.keySet();
              for (String key:keys2){
                  System.out.println("Key: "+key+" Value: "+map2.get(key));
             }
      
    • 删除元素

          //删除元素
          System.out.println("-------------------------------");
          String v=map.remove("e");//remove()通过Key删除Value值
          System.out.println(v);//返回删除的Value值
          Set<String> keys3=map.keySet();
          for (String key:keys3){
              System.out.println("Key: "+key+" Value "+map.get(key));
          }
      
    • 判断Key是否存在

       boolean flag = map.containsKey("a");
      System.out.println(flag);
      
    • 判断Value是否存在

      boolean flag2 = map.containsValue("BB");
      System.out.println(flag2);
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值