HashMap入门指南:3分钟掌握核心用法

📅 2026/6/29 19:22:48
HashMap入门指南:3分钟掌握核心用法
一、HashMap是啥一句话说清HashMapString, String map new HashMap(); map.put(name, 张三); // 存 String name map.get(name); // 取 → 张三就是存键值对的容器钥匙key对应一个值value拿钥匙一秒开锁。二、怎么用三步上手第1步创建// 最常用的写法 HashMapString, Integer map new HashMap();尖括号里写键的类型和值的类型。第2步存数据map.put(苹果, 5); map.put(香蕉, 3); map.put(橘子, 8);第3步取数据int count map.get(苹果); // 得到 5 int count2 map.get(葡萄); // 没有这个key返回 null其他常用操作map.containsKey(香蕉); // true有没有这个key map.remove(橘子); // 删掉橘子 map.size(); // 现在剩2个 map.isEmpty(); // false三、什么时候用HashMap场景用不用原因存学号→姓名✅ 用学号唯一查得快存商品ID→价格✅ 用秒查存用户列表顺序无关✅ 用不用排序需要按顺序遍历❌ 换LinkedHashMapHashMap不保证顺序需要自动排序❌ 换TreeMap按key排序四、新手最常踩的3个坑重点坑1用自定义对象当key取不到值// 自己写的学生类 class Student { String name; int id; Student(String name, int id) { this.name name; this.id id; } } HashMapStudent, String map new HashMap(); map.put(new Student(张三, 1), A班); String result map.get(new Student(张三, 1)); // null取不到原因两个new Student是两个不同对象算出的hash码不一样。解决在Student类里加上DataLombok或者手动重写equals和hashCode。Data // 一键搞定Lombok真香 class Student { String name; int id; }坑2遍历的时候删数据报错// ❌ 这样会报 ConcurrentModificationException for (String key : map.keySet()) { if (key.equals(苹果)) { map.remove(key); } } // ✅ 用迭代器删 IteratorString it map.keySet().iterator(); while (it.hasNext()) { if (it.next().equals(苹果)) { it.remove(); } }坑3get()返回null到底是没这个key还是值就是nullmap.put(key1, null); map.get(key1); // null map.get(key2); // null不存在 // 用 containKey 判断到底有没有 if (map.containsKey(key1)) { System.out.println(key1存在值是null); }五、记住3个数字就够了参数值啥意思默认容量16一开箱默认16个抽屉加载因子0.75用到12个抽屉就自动扩容扩容倍数2倍16→32→64→128六、一句话总结HashMap 带钥匙的抽屉柜存得快、取得快。唯一缺点是不保证顺序想要顺序就用LinkedHashMap。