当前位置: 首页 > news >正文

哈希map中不能将数组作为键的原因 leetcode49

 由leetcode49得来

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

示例 3:

输入: strs = ["a"]
输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字母
package Hash;import com.sun.nio.file.SensitivityWatchEventModifier;import java.lang.reflect.Array;
import java.util.*;/*** @Description: 字母异位词分组* @Author: wangKai* @Date: 2025/6/8 12:28*/
public class Solution49 {public List<List<String>> groupAnagrams(String[] strs) {HashMap<char[],List<String>> hashMap = new HashMap<>();for (int i = 0; i <strs.length; i++) {char[] a = strs[i].toCharArray();Arrays.sort(a);if (hashMap.containsKey(a)){hashMap.get(a).add(strs[i]);}else {List<String> list = new ArrayList<>();list.add(strs[i]);hashMap.put(a,list);}}return new ArrayList<>(hashMap.values());}
}

 

输出错误,可以看到,hashmap没有起到分组的多用

分析原因

由于

        1使用数组(char[])作为 HashMap 的键。由于数组的 equals() 和 hashCode() 方法是基于引用而非内容的,即使两个数组内容相同,它们也会被视为不同的键,导致无法正确分组字母异位词

 此时应该将键替换为String类型的,它们的equals()hashCode()方法基于内容实现.

       2 另外 a.toString() 对数组直接调用 toString(),返回的是 数组类型和内存地址(格式为 [C@哈希值]),而非数组内容。

此时可以使用

class Solution {public List<List<String>> groupAnagrams(String[] strs){HashMap<String,List<String>> hashMap = new HashMap();for (int i = 0; i <strs.length ; i++) {char[] temp = strs[i].toCharArray();   //将字符串转为字符数组Arrays.sort(temp);                       //字符数组排序//在hashmap中查询有没有该排好序的字符串List<String> list  =  hashMap.getOrDefault(new String(temp),new ArrayList<>());//在list集合中放入刚弄出来的字符串list.add(strs[i]);hashMap.put(new String(temp),list);}return new ArrayList<>(hashMap.values());}
}

相关文章:

  • JavaScript 内置对象全解析
  • TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
  • 《从函数模板到类模板:OP泛型编程进化论》
  • Python项目的构建和部署方案推荐
  • QTreeWidget 应用场景与用法详解
  • Docker部署SpringBoot项目
  • 6月8日python-AI代码
  • 面向对象之 继承中的成员访问特点
  • TCP相关问题 第一篇
  • 鸿蒙的一些布局
  • 深入剖析JVM垃圾回收,高并发场景JVM性能调优,内存泄露分析,以及如何避免OOM
  • 8个AI软件介绍及其工作原理讲解
  • Day 21
  • Hilt在android项目中使用的注解说明
  • MS8911S/8921S/8922M/8931S 是一款具有内部迟滞的高速比较器
  • MCP是啥?技术原理是什么?Windows系统配置MCP,Cursor使用MCP
  • Selenium4+Python的web自动化测试框架
  • 职位竞聘BA商业推理测评管理人员TAS倍智题库天翼云益丰等企业
  • 轻量级数学竖式训练方案解析
  • 并发和并行
  • 深圳龙华街道三联社区/太原seo网站管理
  • 临朐做网站的/链接交换公司
  • 广东省政府网站集约化平台建设/抖音推广
  • 云主机怎么安装网站/西安最新消息今天
  • 福建省建设工程继续教育网站/域名注册阿里云
  • 企业网站建设应该注意什么事项问题/品牌宣传策略