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

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

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


提问者:风中过客 2015-05-03 19:30

个回答

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

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

  • 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的