| 本帖最后由 谢明 于 2012-2-25 15:18 编辑 
 {:soso__10882166114642946631_2:}今天改成了这个样子  明朗多了  感谢大家复制代码        //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
*/
 
 |