You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中能否用int[]作为Map的键?为何用其做键取值失败?

为什么int[]作为HashMap键无法正确取值,而List可以?
  • HashMap判断键是否相等的核心逻辑:必须满足两个条件——两个键的hashCode()返回值相同,且调用equals()方法返回true。
  • int[]的hashCode()和equals()是基于对象身份的:Java里数组属于对象,但它直接继承了Object类的这两个方法。Object的hashCode()返回的是和对象内存地址绑定的值,equals()则是直接比较对象的引用是否指向同一块内存。也就是说,哪怕两个int[]的元素完全一样,只要是用new创建的不同对象,HashMap就会把它们当成完全不同的键。
  • List的hashCode()和equals()是基于内容的:像ArrayList这类常用List实现,重写了这两个方法——计算hashCode时会遍历所有元素累加哈希值,equals时会逐个比较元素的内容和顺序。只要两个List的元素内容、顺序完全一致,就会被HashMap判定为同一个键。

拿你的代码举例:
你用prefixSum.put(new int[]{i,j}, sum)存入的是一个新的数组对象,之后调用prefixSum.get(new int[]{0,0})时,又新建了另一个数组对象。这两个对象虽然内容一样,但引用不同,HashMap认不出它们是同一个键,所以返回null。而换成List的话,只要两个List的元素相同,就能被HashMap识别为同一个键,自然能正确取值。

内容的提问来源于stack exchange,提问作者Chiguire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:03:12