问答详情
源自:6-4 学生选课---判断 Map 中是否包含指定的 key 和 value

还是没明白 为什么containsKey就不用重写,containsValue就要重写呢》

还是没明白 为什么containsKey就不用重写,containsValue就要重写呢》

提问者:爆炸头shadow 2016-06-21 20:06

个回答

  • 哀幻暝
    2016-07-27 17:39:29

    contains一定会涉及判断相等这一步

    现在请题主自己定义一下对象在什么情况下相等?

    如果对象里面有五个属性,题主可能会说:那就是五个属性都相等才相等啊

    嗯,这确实挺贴近“相等”这个词的含义的,然而sun公司的程序员不这么认为,

    严格来说,Map和List中的元素(对象)和题主你给contains方法传的参数肯定不是同一个对象

    所以他们永远不是绝对相等的,所以老师没有重写的时候会输出false

    而并不是所有的时候我们都需要这个对象里面所有的属性都相等才认为他们相等,

    往往只需要主键相等,学习了关系型数据库就明白什么是主键了,举个栗子:身份证号码是主键,名字不是主键

    重写equals,hashcode可以让程序知道这个程序员判断相等的标准是什么,

    其实key也可以重写,只是key往往是基本数据类型或者String,只是他们都只有一个属性,想不想等就它一个说了算。

    说了一大堆废话,希望可以给新手解惑,不过等你们以后再回过头想,上面还真的是一堆废话,

  • 酒十六
    2016-06-22 18:14:15

    如果Key也是自定义对象类型,当然也要重写,只不过一般没人吧Key也作为自定义对象类型吧