在这节视频中,为什么只有比较containsValue的时候才出错,才需要修改hashcode和equals方法?

来源:6-4 学生选课---判断 Map 中是否包含指定的 key 和 value

风中过客

2015-05-03 19:30

为什么containsKey的时候,没修改不报错呢?


写回答 关注

4回答

  • Hjava
    2015-05-21 10:31:55
    已采纳

    因为Map的键值对应的值是唯一的,而值所映射的键值却有可能是多个的,而Contains方法自带的比较机制是比较索引,也就是地址,所以ContainsValue方法需要改写

    风中过客

    非常感谢!

    2015-05-21 13:41:42

    共 1 条回复 >

  • DLZer
    2015-09-30 16:22:10

    个人理解,containsKey()方法中,调用的是String类型的equals()函数,查阅javaAPI文档可知,String类型已经对equals()方法进行了重写:“将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true”。所以就不需要我们进行重写了!

  • 风中过客
    2015-05-04 12:37:48

    package com.imooc.collection;


    import java.util.HashMap;

    import java.util.Map;


    /** * @author  guokewind 

     * @date 创建时间:2015年5月4日 下午12:01:29 

     * @version 

     * @parameter  

     * @since  

     * @return  */

    public class Test3 {

    public Map<String, String> students;

    /**

    * 在构造器中初始化students属性

    */

    public Test3() {

    this.students = new HashMap<String, String>();

    }

    public void testPut() {

    students.put("1", "xiaoming");

    }

    public void duibi(String id,String name){

    System.out.println(students.containsKey(id));

    System.out.println(students.containsValue(name));

    }

    public static void main(String[] args) {

    // TODO Auto-generated method stub

               Test3 test=new Test3();

               test.testPut();

              Student st=new Student("1","xiaoming");

               test.duibi("1","2");

               test.duibi("1","xiaoming");

    }


    }


  • 康振宁
    2015-05-04 10:36:23

    比较的是字符串吧?比较字符串的时候,是需要写equals的

    风中过客

    我试了一下 如果 是这样的 his.students = new HashMap<String, String>(); 这样的话 是能够正确比较的。 会不会因为之前比较的Value,直接把course2放到containsValue()里面了? 因此导致无法正确比较

    2015-05-04 12:37:38

    共 2 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题