A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Oo不弃 金牌黑马   /  2015-2-10 21:14  /  1646 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Oo不弃 于 2015-2-11 18:42 编辑

先看代码:
  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import com.wgh.model.Goods;
  4. class Student{
  5.         private String name;
  6.         private int age;
  7.         
  8.         public Student(){
  9.         }
  10.         
  11.         public Student(String name,int age){
  12.                 this.age = age;
  13.                 this.name = name;
  14.         }
  15. }
  16. public class Test {

  17.         public static void main(String[] args) {
  18.                
  19.                 Map<Student,String> map = new HashMap<Student,String>();
  20.                 Student stu1 = new Student("张三",20);
  21.                 Student stu = new Student("张三",20);
  22.                 Student stu2 = new Student("李四",22);
  23.                 Student stu3 = new Student("王五",23);
  24.                
  25.                
  26.                 map.put(stu1,"学生张三");
  27.                 map.put(stu2,"学生李四");
  28.                 map.put(stu3,"学生王五");
  29.                
  30.                 String s = map.get(stu);
  31.                 System.out.print(s);
  32.                
  33.         }

  34. }
复制代码

上面代码输出结果是null,其实我是想输出”学生张三“。上面map的key可以设置为student类型,但是也产生一个问题,就是在执行get操作的时候,相同的内容,不同的对象,get出来的结果是不一样的。上面的stu和stu1虽然是不同对象,但是内容是一样的,如果我想在map.get(stu)的时候也输出”学生张三“(在没有把stu put进map里面的前提下),大神们可有什么办法不?




评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

7 个回复

倒序浏览
你在好好看看你的代码哦!     String s = map.get(stu);  这里你键反回的值就是NULL,  因为你上面就没有在键中关联值!   希望对你有帮助!
回复 使用道具 举报
马铃薯 发表于 2015-2-10 21:34
你在好好看看你的代码哦!     String s = map.get(stu);  这里你键反回的值就是NULL,  因为你上面就没有 ...

恩恩,我知道为什么输出null,我就不知道有什么办法可以在map.get(stu)的时候也输出”学生张三“(在没有把stu put进map里面的前提下)
回复 使用道具 举报
Oo不弃 发表于 2015-2-10 23:44
恩恩,我知道为什么输出null,我就不知道有什么办法可以在map.get(stu)的时候也输出”学生张三“(在没 ...

理论上应该不可行,因为stu跟map之间没有任何关系啊
回复 使用道具 举报 0 1
Oo不弃 发表于 2015-2-10 23:44
恩恩,我知道为什么输出null,我就不知道有什么办法可以在map.get(stu)的时候也输出”学生张三“(在没 ...

没添加怎么能行,除非你使用stu1
回复 使用道具 举报
stu 是你new了一个对象,每次使用new 关键字,就是在内存中开辟新的内存。stu和你之前new的stu1 肯定不是相同的地址引用,所以不是同一个对象,就不会获取成功了。
回复 使用道具 举报
本帖最后由 hhqnmlgb 于 2015-2-11 13:19 编辑

判断对象是否相同的条件有两个,
1,看hashCode值是否相同
2,看equals是否相同
所以只要覆盖Student的hashCode方法和equals方法就可以了                        
        public int hashCode()
        {
                return name.hashCode()+age*17;
        }
        public boolean equals(Object o)
        {
                if(!(o instanceof Student))
                        throw new ClassCastException("不是Student");
                Student stu=(Student)o;
                return this.name.equals(p.name)&&this.age==p.age;
        }




回复 使用道具 举报 1 0
hhqnmlgb 发表于 2015-2-11 13:06
判断对象是否相同的条件有两个,
1,看hashCode值是否相同
2,看equals是否相同

牛!感谢这位哥们,问题解决了,{:3_64:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马