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的时候康清楚入参和返回值!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言