日期:2014-05-20 浏览次数:20969 次
-------------Code.java----------- package com.Code_Person; public class Code { public final int id; //身份证号已确认,不能修改 public Code(int id) { this.id=id; } //覆写equals() public boolean equals(Object anObject) { if(anObject instanceof Code) { return this.id==((Code)anObject).id; } return false; } public String toString() { return id+"\n"; } //覆写hashCode() public int hashCode() { return this.id; } } --------------Person.java-------------- package com.Code_Person; public class Person { public String name; public Code id; public Person(String name,Code id) { this.name=name; this.id=id; } //覆写equals() public boolean equals(Object anObject) { if(anObject instanceof Person) { return this.id.equals(((Person) anObject).id); } return false; } public String toString() { return "姓名:"+name+" "+id; } //覆写hashCode() public int hashCode() { return this.id.id; } } ----------------HashCode.java----------------- package com.Code_Person; import java.util.*; public class HashCode { public static void main(String[] args) { /*第一部分用身份证号作key,用人名作value,显示信息 用p9去顶替掉p4,然后通过p9的身份证号找到p9的信息 按照要求覆写了Code.hashCode()来保证哈希值一样 这一部分成功了*/ HashMap map=new HashMap(); Person p1=new Person("哈哈1号",new Code(111)); Person p2=new Person("哈哈2号",new Code(222)); Person p3=new Person("哈哈3号",new Code(333)); Person p4=new Person("哈哈4号",new Code(444)); map.put(p1.id,p1); map.put(p2.id,p2); map.put(p3.id,p3); map.put(p4.id,p4); System.out.println("map:"+"\n"+map);//显示 Person p9=new Person("豪豪4号",new Code(444)); map.put(p9.id,p9); System.out.println("map:"+"\n"+map);//更新后再显示 System.out.println("身份证为444的人的信息:"+"\n"+map.get(new Code(444))); // System.out.println(); System.out.println(); // /*第二部分用人名作key,用身份证号作value,显示信息 用p10去顶替掉p8,然后想通过p10的人名找到p10的信息, 但问题(1)p10没有替换掉p8,显示的仍然是"哈哈8号", 而问题(2)在查找"豪豪8号"的时候,却仍然能找出信息, 为了hashCode一致,在Person类里面也做了覆写,不知道错在什么地方, 是不是哪里理解出错了,求前辈们指点 */ HashMap map2=new HashMap(); Person p5=new Person("哈哈5号",new Code(555)); Person p6=new Person("哈哈6号",new Code(666)); Person p7=new Person("哈哈7号",new Code(777)); Person p8=new Person("哈哈8号",new Code(888)); map2.put(p5,p5.id); map2.put(p6,p6.id); map2.put(p7,p7.id); map2.put(p8,p8.id); System.out.println("map2:"+"\n"+map2);//显示 Person p10=new Person("豪豪8号",new Code(888)); map2.put(p10, p10.id); System.out.println("map2:"+"\n"+map2);//更新后显示,问题(1) System.out.println("查找名叫豪豪8号的人信息:"+"\n"+map2.get(new Person("豪豪8号",new Code(888))));//问题(2) } }
map: {222 =姓名:哈哈2号 222 , 444 =姓名:哈哈4号 444 , 111 =姓名:哈哈1号 111 , 333 =姓名:哈哈3号 333 } map: {222 =姓名:哈哈2号 222 , 444 =姓名:豪豪4号 444 , 111 =姓名:哈哈1号 111 , 333 =姓名:哈哈3号 333 } 身份证为444的人的信息: 姓名:豪豪4号 444 map: {姓名:哈哈6号 666 =666 , 姓名:哈哈8号 888 =888 , 姓名:哈哈5号 555 =555 , 姓名:哈哈7号 777 =777 } map: {姓名:哈哈6号 666 =666 , 姓名:哈哈8号 888 =888 , 姓名:哈哈5号 555 =555 , 姓名:哈哈7号 777 =777 } 查找名叫豪豪8号的人信息: 888