关于Map使用自定义类做为 key时的问题

先看代码:importjava.util.HashMap;importjava.util.Map;classStudent{privateStringname;priva... 先看代码:
import java.util.HashMap;
import java.util.Map;
class Student{
private String name;
private int age;

public Student(){
}

public Student(String name,int age){
this.age = age;
this.name = name;
}
}
public class Test {
public static void main(String[] args) {

Map<Student,String> map = new HashMap<Student,String>();
Student stu1 = new Student("张三",20);
Student stu = new Student("张三",20);
Student stu2 = new Student("李四",22);
Student stu3 = new Student("王五",23);

map.put(stu1,"学生张三");
map.put(stu2,"学生李四");
map.put(stu3,"学生王五");

String s = map.get(stu);
System.out.print(s);

}
}

上面代码输出结果是null,其实我是想输出”学生张三“。上面map的key可以设置为student类型,但是也产生一个问题,就是在执行get操作的时候,相同的内容,不同的对象,get出来的结果是不一样的。上面的stu和stu1虽然是不同对象,但是内容是一样的,如果我想在map.get(stu)的时候也输出”学生张三“(在没有把stu put进map里面的前提下),大神们可有什么办法不?
展开
 我来答
苍紫幽蓝
推荐于2017-11-27 · TA获得超过440个赞
知道小有建树答主
回答量:207
采纳率:80%
帮助的人:161万
展开全部
这个需要重写Student类的hashCode和equals方法。这两个方法是集成自超类Object的。
HashMap默认是使用hashCode对比传入的key是否一致,如果hashCode一致会用equals进行对比,如果还是一致那么认为是同一个key。
你的Student类有age和name两个成员变量,可以根据这两个变量设定hashCode和equals方法。
public int hashCode(){
return name.hashCode() + age;
}
public boolean equals(Object o){
return (o instanceof Student) &&
(age ==((Student)o).age) &&
(name == null && ((Student)o).name == null ||
name.equals(((Student)o).name)
);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式