Map集合的使用

本文深入解析Java中Map集合的基本操作与四种遍历方法,包括通过键获取值、判断键与值的存在、删除键值对及清空集合等。并通过示例代码详细展示了HashMap的使用技巧,如键值对的添加、修改与成绩求和应用。
摘要由CSDN通过智能技术生成

Map

Map的基本操作:

@Test
public void e1(){
    //建立Map集合
    Map<String,Integer> map = new HashMap<>();
    //建立键值对
    map.put("语文",50);
    map.put("数学",50);
    map.put("英语",50);
    System.out.println("此时map长度为:"+map.size());
    //通过key取访问value
    System.out.println(map.get("语文"));
    //判断某一个key是否在map里面,
    System.out.println(map.containsKey("数学"));
    System.out.println(map.containsKey("生物"));
    //判断某一个value是否在map里面
    int a=54;
    System.out.println(map.containsValue(a));
    System.out.println(map.containsValue(50));
    //通过关键字删除对应的键值对
    map.remove("数学");
    System.out.println("删除数学以后");
    //遍历map集合
    map.forEach((key,value)->{
        System.out.println(key+value);
    });
    //清空map集合
    map.clear();
    //访问长度
    System.out.println("清空以后的map长度为:"+map.size());
}

如何遍历map集合
三种方式
第一种:通过获得所有的键,然后用for循环去遍历集合(通过获取值)
第二种:entrySet方式遍历集合,同遍历所有的key-------->value对
第三种:java新增的forEacg方法传入一个BigConsummer对象,同时遍历Key , value
(Jack雷神的哦)

@Test
public void m2(){
    Map<String,Integer> map = new HashMap<>();
    /**
     * 向map集合里面添加键值对
     * put方法
     */
    map.put("语文",80);
    map.put("数学",91);
    map.put("英语",90);
    System.out.println("----------------------第一种方式遍历集合--------------------------");
   Set<String>  keys = map.keySet();  //keySet方法获取map集合中所有的键的集合
   for(String str:keys){
       System.out.println("当前拿到的Value是:"+map.get(str));
   }
    System.out.println("----------------------第二种方式遍历集合--------------------------");
    Set<Map.Entry<String,Integer>> ss =map.entrySet();
   /* for(Map.Entry<String,Integer> en:ss){
        System.out.println("当前遍历的键是:"+en.getKey());
        System.out.println("当前遍历的value是:"+en.getValue());
    }*/
    Iterator<Map.Entry<String,Integer>> iterator = ss.iterator();

    while(iterator.hasNext()){
        Map.Entry<String,Integer> en = iterator.next();
        System.out.println("当前遍历的键是:"+en.getKey());
        System.out.println("当前遍历的value是:"+en.getValue());

    }
    System.out.println("----------------------第三种方式遍历集合--------------------------");
    map.forEach((key,value)->{
        System.out.println("当前遍历的键值对是:"+key+","+value);
    });
}

第四种遍历map集合的方法--------迭代方法


//迭代方式遍历map集合,也用到Entry
    @Test
    public void e3(){
        Map<String,Integer> map = new HashMap();
        //建立键值对
        map.put("语文",67);
        map.put("数学",22);
        map.put("英语",33);
        Set<Map.Entry<String,Integer>> ss = map.entrySet();
        //先得到迭代对象
        Iterator<Map.Entry<String,Integer>> iterator = ss.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

运行结果:
在这里插入图片描述

/**

  • HashMap的存储原理:
  • hashMap第一次向集合里面添加键值对的时候,首先会将key的值进行做hash算法,算出对应的hashCode
  • 把相应的value存储对应的hash地址
  • 当hashMap集合第二次添加键值对的时候,同样也会将key进行hash运算,算出对应的hashCode,这是会将
  • 当前算出的hashCode于hashMap集合里面的所有HashCode值进行比较,如果发现HashCode值不一样,则HashMap
  • 集合会把当前的key-value对添加到map集合;如果发现本次算出的hashCode和集合里面的任何hashCode相同,
  • 则此时回去比较equals方法,如果equal方法返回true,则会覆盖集合里面对应的可以相同value,如果返回
  • false,此时HashMap集合也会将key-value加入到集合中(但是这中情况是不允许出现的,因为存储的时候会形成链表
  • 大大影响hashMap的性能)。
    /
    /
    *
  • Hashtable 和 hashMap 提供的API完全一样
  • 不同的地方是HashTable是jdk1.0提供的 HashMAP是1.5提供的
  • hashTable线程安全 HashMap线程不安全
  • hashTable的key不能为null,value不能为null 而HashMap可以为null
    */
    /Hashtable map1 = new Hashtable();
    map1.put(“ss”,null);
    /

补充

@Test
public void e_1(){
    //建立Map集合
    Map<String,Integer> map = new HashMap<>();
    //建立键值对
    map.put("语文",51);
    map.put("数学",50);
    map.put("英语",52);
    System.out.println("----------------------改变前------------------");
    System.out.println(map.get("数学"));//565
    map.forEach((a,b)->{
        System.out.println(a+"="+b);
    });
    System.out.println("----------------------改变后------------------");
    //通过key改变value值
    if(map.containsKey("数学")){
        map.put("数学", 100);}

    //通过value改变key值
    if(map.containsValue(50)){
        map.put("物理", 50);}
    map.forEach((a,b)->{
        System.out.println(a+"="+b);
    });
}

运行结果
在这里插入图片描述

作业求利用map形式求语数外成绩的和

@Test
public void e2(){
    Map<String,Integer> map = new HashMap<>();
    //建立键值对
    map.put("语文",67);
    map.put("数学",22);
    map.put("英语",33);
    System.out.println("--------------第一种遍历方式-----------");
    Set<String> keys=map.keySet();//keySet()方法可以得到map里面所有的键
    System.out.println();
    System.out.println("keys所存在的格式是:"+keys);
    //现在我想要通过以上方法遍历时输出-----> key,value的形式
    //现在将keys转化成数组
    Object[] obj=keys.toArray();
    int i=-1;
    int sum=0;
    System.out.println("遍历的成绩是:");
    for(Object o:keys){
        i++;
        sum=sum+map.get(o);
        System.out.println(obj[i]+","+map.get(o));
    }
    System.out.println("总成绩为:"+sum);

    System.out.println("---------第二种遍历方式--------------");
    Set<Map.Entry<String,Integer>> ss=map.entrySet();
    int sum1=0;
    for (Map.Entry<String,Integer> ee:ss){
        sum1+=ee.getValue();
        System.out.println(ee.getKey()+" "+ee.getValue());
    }
    System.out.println(sum1);

    System.out.println("---------第三种遍历方式--------------");
    int sum2=0;
    //.forEach方式哦,很好
    map.forEach((e,o)->{
        System.out.println(e+" "+o);
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值