本帖最后由 谢明 于 2012-2-25 15:18 编辑
- //package c08.hashEx;
- import java.util.*;
- //身份证类
- class Code{
- final int id;//身份证号码已经确认,不能改变
- Code(int i){
- id=i;
- }
- public boolean equals(Object anObject) {
- if (anObject instanceof Code){
- Code other=(Code) anObject;
- return this.id==other.id;
- }
- return false;
- }
- // hashcode 改到这里就正确了
- public int hashCode(){
- System.out.println("code调用hashcode");
- return id;
- }
- public String toString() {
- return "身份证:"+id;
- }
- }
- //人员信息类
- class Person {
- Code id;// 身份证
- String name;// 姓名
- public Person(String name, Code id) {
- this.id=id;
- this.name=name;
- }
- public boolean equals(Object anObject) {
- if (anObject instanceof Person){
- Person other=(Person) anObject;
- return this.id.equals(other.id);
- }
- return false;
- }
- //写了2个 标注了下
- public int hashCode(){
- System.out.println("person调用hashcode");
- return id.id;
- }
- public String toString() {
- return "姓名:"+name+" 身份证:"+id.id+"\n";
- //return "姓名:"+name+"\n";
- }
- }
- public class HashCodeEx {
- public static void main(String[] args) {
- Person p1=new Person("张三",new Code(123));
- Person p2=new Person("李四",new Code(456));
- HashMap map1=new HashMap();
- System.out.println("---------------------------");
- map1.put(p1,p1.id);//根据person作为key值存放到Map中
- map1.put(p2,p2.id);
- System.out.println("Map1 k:person v:id 信息:\n"+map1);
- System.out.println("---------------------------");
- HashMap map2=new HashMap();
- map2.put(p1.id,p1);//根据身份证来作为key值存放到Map中
- map2.put(p2.id,p2);
-
- System.out.println("Map2 k:id v:person 信息:\n"+map2);
- System.out.println("---------------------------");
- // 张三 改名为:张山
- Person p3=new Person("张山",new Code(123));
- map1.put(p3,p3.id);
- System.out.println("张三改名后 Map1 k:person v:id 中存放的人员信息:\n"+map1);
- System.out.println("---------------------------");
- map2.put(p3.id,p3);
- System.out.println("张三改名后 Map2 k:id v:person 中存放的人员信息:\n"+map2);
- System.out.println("---------------------------");
- //查找身份证为:123 的人员信息
- System.out.println("map2查找身份证为:123 的人员信息:"+map2.get(new Code(123)));
- System.out.println("map1查找person p5 的人员信息:"+map1.get(p3));
- }
- }
- /*
- ---------------------------
- person调用hashcode
- person调用hashcode
- Map1 k:person v:id 信息:
- {姓名:李四 身份证:456
- =身份证:456, 姓名:张三 身份证:123
- =身份证:123}
- ---------------------------
- code调用hashcode
- code调用hashcode
- Map2 k:id v:person 信息:
- {身份证:456=姓名:李四 身份证:456
- , 身份证:123=姓名:张三 身份证:123
- }
- ---------------------------
- person调用hashcode
- 张三改名后 Map1 k:person v:id 中存放的人员信息:
- {姓名:李四 身份证:456
- =身份证:456, 姓名:张三 身份证:123
- =身份证:123}
- ---------------------------
- code调用hashcode
- 张三改名后 Map2 k:id v:person 中存放的人员信息:
- {身份证:456=姓名:李四 身份证:456
- , 身份证:123=姓名:张山 身份证:123
- }
- ---------------------------
- code调用hashcode
- map2查找身份证为:123 的人员信息:姓名:张山 身份证:1
- person调用hashcode
- map1查找person p5 的人员信息:身份证:123
- */
复制代码 {:soso__10882166114642946631_2:}今天改成了这个样子 明朗多了 感谢大家
|