Java数据结构_Map类

Map集合

 

 键(Key)不可以重复、无序    值(Value)可以重复

 

现在有一个需求,给一段长度为80的随机出现的A、B、C、D四个字符组成的字符串,要我们用HashMap去统计ABCD出现的个数,下面两端代码可以学到一些在出现Char和String中可能会发现的错误

 

复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class MapTest { public static void main(String[] args) { String[] point = {"A", "B", "C", "D"}; Map<String, Integer> maps = new HashMap<>(); Random r = new Random(); StringBuffer points = new StringBuffer(); for (int i = 0; i < 80; i++) { points.append(point[r.nextInt(point.length)]); } System.out.println(points); for (int i = 0; i < points.length(); i++) { char at = points.charAt(i); if (maps.containsKey(String.valueOf(at))) { maps.put(String.valueOf(at),maps.get(String.valueOf(at))+1); }else{ maps.put(String.valueOf(at),1); } } System.out.println(maps); } }
复制代码

 

复制代码
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class MapTest2 {
    public static void main(String[] args) {
        String[] point = {"A", "B", "C", "D"};
        Map<Character, Integer> maps = new HashMap<>();
        Random r = new Random();
        StringBuffer points = new StringBuffer();
        for (int i = 0; i < 80; i++) {
            points.append(point[r.nextInt(point.length)]);
        }
        System.out.println(points);
        for (int i = 0; i < points.length(); i++) {
            char at = points.charAt(i);
            if (maps.containsKey(at)) {
                maps.put(at,maps.get(at)+1);
            }else{
                maps.put(at,1);
            }
        }
        System.out.println(maps);
    }
}
复制代码

上面两种方法都能实现,区别在于一个是用的Map<String,Integer>,另一个用的Map<Character,Integer>

不同的地方:

 

 

 

 

 

 

 

 

 Map<String,Integer>的for循环里,因为用了charAt()方法,返回值是一个char类型,我们在用maps.containsKey()方法的时候,containsKey里面的参数必须是一个Map的Key指定的E类型,如果是别的比如char类型,那么将永远返回为false,这也导致了for循环出现错误。结果一直为else的结果。

使用 Map<String,Integer>装载的话 用put方法的时候这也写就出现了错误,我们用强转,发现可以跑?

 

 运行后果然出现了预料之内的错误

 

 返回的ABCD值果然都是1

 

 

sb罗昊@lhbilibili给的测试

 加个valueOf就变True了

 

给的启发是啥呢?没错,就是调方法、写接口、API的时候康清楚入参和返回值!!

 

posted @   Lee最好好好吃饭  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示