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)
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)
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