我的理解是:TreeSet可以进行自定义排序,但是内容应该和选用HashSet是一样的。但是结果是:使用TreeSet打印集合少了一个(我认为少了个元素[student 2020124 is 19 years old])。是不是和我写的compareTo方法有关系?
使用HashSet:
import java.util.HashSet;
import java.util.TreeSet;
class testTre{
public int age;
public final String id;
public testTre(String id, int age){
this.id = id;
this.age = age;
}
@Override
public String toString(){
return "[student " + this.id + " is "+ this.age + " years old]";
}
// @Override
// public int compareTo(Object obj){ // 自然排序
// testTre temp = (testTre) obj;
//// if(this.age < temp.age)
//// return -1;
//// else
//// return 1;
// if(temp.age == this.age)
// System.out.println("相同");
// return this.age > temp.age ? 1 : this.age < temp.age ? -1 : 0;
// }
@Override
public boolean equals(Object obj){
if(this == obj){ // 判断是否为同一个对象,即自己与自己比较
return true;
}
else if( obj != null && obj.getClass() == testTre.class){ // 判断两个对象是否出自同一个(运行时)类
testTre temp = (testTre) obj; // 强制类型转换
return temp.id == this.id;
}
return false;
}
@Override
public int hashCode(){
return Integer.valueOf(this.id).intValue();
}
}
public class Treeset {
public static void main(String[] args){
HashSet Ts = new HashSet();
Ts.add(new testTre("2020106",12));
Ts.add(new testTre("2020108",19));
Ts.add(new testTre("2020208",15));
Ts.add(new testTre("2020104",22));
Ts.add(new testTre("2020124",19));
Ts.add(new testTre("2020124",19));
System.out.println(Ts);
}
}
// HashSet:
//[[student 2020108 is 19 years old], [student 2020124 is 19 years old],
// [student 2020106 is 12 years old], [student 2020104 is 22 years old],
// [student 2020208 is 15 years old]]
使用TreeSet:
import java.util.HashSet;
import java.util.TreeSet;
class testTre implements Comparable{
public int age;
public final String id;
public testTre(String id, int age){
this.id = id;
this.age = age;
}
@Override
public String toString(){
return "[student " + this.id + " is "+ this.age + " years old]";
}
@Override
public int compareTo(Object obj){ // 自然排序
testTre temp = (testTre) obj;
// if(this.age < temp.age)
// return -1;
// else
// return 1;
// if(temp.age == this.age)
// System.out.println("相同");
return this.age > temp.age ? 1 : this.age < temp.age ? -1 : 0;
}
@Override
public boolean equals(Object obj){
if(this == obj){ // 判断是否为同一个对象,即自己与自己比较
return true;
}
else if( obj != null && obj.getClass() == testTre.class){ // 判断两个对象是否出自同一个(运行时)类
testTre temp = (testTre) obj; // 强制类型转换
return temp.id == this.id;
}
return false;
}
@Override
public int hashCode(){
return Integer.valueOf(this.id).intValue();
}
}
public class Treeset {
public static void main(String[] args){
TreeSet Ts = new TreeSet();
Ts.add(new testTre("2020106",12));
Ts.add(new testTre("2020108",19));
Ts.add(new testTre("2020208",15));
Ts.add(new testTre("2020104",22));
Ts.add(new testTre("2020124",19));
Ts.add(new testTre("2020124",19));
System.out.println(Ts);
}
}
// TreeSet:
// [[student 2020106 is 12 years old], [student 2020208 is 15 years old],
// [student 2020108 is 19 years old], [student 2020104 is 22 years old]]