问答详情
源自:6-2 学生选课---判断 Set 中课程是否存在

为何要重写Course下的hashCode()和equals()方法,我这样理解对不对?

本来HashSet下的contains()方法是比较student.courses下的元素的哈希码与course2的哈希码是否一样,这当然是不一样的所以返回的是false。而重写之后,是比较student.courses下的元素的name属性的哈希码与course2.name的哈希码是否一样,它们是一样的,所以返回的是true。

这样理解对么?一直都一知半解的。。。

提问者:啊梨真神奇 2016-01-24 20:45

个回答

  • qq电子时代
    2016-04-11 09:28:51

    你理解了吗  可以给我说说吗   我不理解对于List与Set而言,都是遍历一边,分别与courses2.name进行equals   

    List不需要重写  但是Set就需要重写?

    这是我理解的hashcode与equals   (hash比较一个域,equals比较域中一个元素.equals为true,hash一定为true;

    equals为false,hash不一定为false)  

    在此 contains先比较hash,后比较equals( hash为true,equals不一定为true;hash为false,equals一定为false) 

    这是我理解的不知道对不对      

  • gao634209276
    2016-02-11 20:52:43

    java自带的hashCode()和equals()方法定义比较简单,很多时候不适用我们使用的场合,这两个方法在哪里重写都一样,只要是在这个包下的。你使用contains()方法时候他需要调用者两个方法,他会优先使用重写的hashCode()和equals()方法

  • qq_燃烧的小面包i_0
    2016-01-24 23:39:15

    这样理解对的呢