Student.javaimport java.util.*;
public class Student
{
public static void main(String[] args)
{
Set set=new TreeSet();
Hash_Set hs=new Hash_Set();
Hash_Set hs2=new Hash_Set();
Hash_Set hs3=new Hash_Set();
Hash_Set hs4=new Hash_Set();

hs.setId(01);
hs.setName("li");

hs2.setId(02);
hs2.setName("wang");

hs3.setId(03);
hs3.setName("zhang");

hs4.setId(01);
hs4.setName("li");

set.add(hs);
set.add(hs2);
set.add(hs3);
set.add(hs4);
Iterator it=set.iterator();
while(it.hasNext())
{
Object obj=it.next();
Hash_Set hs5=(Hash_Set)obj;
System.out.println(hs5.getId()+":"+hs5.getName());
}
}}
Test_Set.javaimport java.util.*;
public class Test_Set implements Comparable
{
    private int id;
    private String name;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int hashCode()
    {
        return id;
    }
    public boolean equals(Object obj)
    {
        if(obj==null)
        {
            return false;
        }
        if(obj instanceof Test_Set)
        {
            Test_Set hs=(Test_Set)obj;
            if(id==hs.id)
            {
                if(this.name==hs.name)
                    return true;
            }
        }
        return false;
    }
    public int compareTo(Object obj)
    {
        int result=0;
        System.out.println("id:"+id);  //这个打印出来是:3 3 1 1
        System.out.println(((Test_Set)obj).id); //这个打印出来是:1 2 2 1,为什么id和(((Test_Set)obj).id是这样的数字?
        if(obj!=null && obj instanceof Test_Set)
        {
            Test_Set hs=(Test_Set)obj;
            if(id>hs.id)
                result=1;
            else if(id<hs.id)
                result=-1;
            else
            {
                result=0;
            }
        }
        return result;
        
    }
}以上Test_Set.java中的hashCode(),equals(),compareTo()三个方法在Student.java中的调用顺序是怎么样,是哪个方法先被调用。
Test_Set.java和Student.java这两个类的执行顺序和执行过程是怎么样的,请了解的朋友们讲的详细点,谢谢啦:P)

解决方案 »

  1.   

    查看api文档,了解Set 集合的add()方法的应用.
    add
    boolean add(E e)如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向该 set 中添加指定的元素 e。如果此 set 已经包含该元素,则该调用不改变此 set 并返回 false。结合构造方法上的限制,这就可以确保 set 永远不包含重复的元素。 
    上述规定并未暗示 set 必须接受所有元素;set 可以拒绝添加任意特定的元素,包括 null,并抛出异常,这与 Collection.add 规范中所描述的一样。每个 set 实现应该明确地记录对其可能包含元素的所有限制。 
    程序运行结果应该如下:
    id:2
    1
    id:3
    1
    id:3
    2
    id:1
    2
    id:1
    1
    1:li
    2:wang
    3:zhang