栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

2 HashMap之间的相等性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2 HashMap之间的相等性

equals
Java数组类型上的方法等效于
==
,因为Java数组“类”不会覆盖
Object.equals

如果要“按值”比较数组,则需要使用适当的

java.util.Arrays.equals(...)
方法,或者自己实现。

如果您

HashMap
使用数组作为键或值,那么它将调用该数组的
equals
方法来测试两个映射之间的键和/或值是否相同。
HashMap.equals
(从您的角度来看)这会使行为异常。这就是链接文章所说的。但是,数组语义
HashMap
在将数组用作键或值类 时才 影响相等性。如果您不这样做,则
HashMap::equals
应该可以按预期工作。

用于

Map
类平等的javadocs
涉及到一点,但是它们基本上归结为采用两个条目集,比较它们的大小,然后执行
s1.containsAll(s2)
。当然,这很昂贵,但是它 应该
Map
正确实现
Map
接口的所有类都有效。


请注意,出于以下几个原因,将数组用作映射的键​​是一个坏主意:

  1. 在大多数情况下,数组
    equals
    和的语义
    hashCode
    对于a是错误的
    HashMap
    。对于大多数用例,您需要映射以按值而不是按对象标识比较键。
  2. 数组是可变的。如果我们假设存在针对
    equals
    /
    hashpre
    问题的解决方法,则 可以通过修改数组键来破坏映射的不变式。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号