import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;class Person2 implements Comparable{
private int id;
private String name;
private int age;
public Person2(){

}
public Person2(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
} public boolean equals(Object o){
Person2 p1 = (Person2)o;
return id==p1.id&&age==p1.age && name.equals(p1.name);  }

public String toString(){
return id+"--"+ name+"--"+ age;
}

public int hashCode(){
return id*age*name.hashCode();
}
@Override
public int compareTo(Object o) {
Person2 p = (Person2)o;
if(this.id>p.id){
return 1;
}else if(this.id<p.id){
return -1;
}else{
return 0;
}

}

}
public class TestHashSet  {
public static void main(String[] args) {
Set set = new HashSet();
set.add(new Person2(1,"zhangshan",15));
set.add(new Person2(1,"zhangshan",15));
set.add(new Person2(2,"lisi",15));
set.add(new Person2(3,"li",35));
for(Iterator it=set.iterator();it.hasNext();){
System.out.println(it.next());
}
}
}输出结果是:、
2--lisi--15
1--zhangshan--15
3--li--35

解决方案 »

  1.   

    HashSet是散列分布的,不是顺序的,你可以试试TreeSet
      

  2.   


    +1,正解,输出。
    1--zhangshan--15
    2--lisi--15
    3--li--35
      

  3.   

    我实现Comparable接口重写compareTo方法就是为了通过比较让他按序输出啊!还是有点不理解。
      

  4.   

    HashSet由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。hashSet并不会按照比较器进行比较排序,你要排序的请使用TreeSet 。API中有更详细的说明