The example of this article describes the method of using Java TreeSet to sort students by age and name. Share it with everyone for your reference, the details are as follows:
import java.util.*; class Treeset { public static void main(String[] args) { TreeSet t = new TreeSet(); t.add(new student("a1",15)); t.add(new student("a2",15)); t.add(new student("a1",15)); t.add(new student("a3",16)); t.add(new student("a3",18)); for(Iterator it = t.iterator();it.hasNext();) { student tt = (student)it.next();//强制转成学生类型 sop(tt.getName()+","+tt.getAge()); } } public static void sop(Object obj) { System.out.println(obj); } } class student implements Comparable//接口让学生具有比较性 { private String name; private int age; student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Object obj) { if(!(obj instanceof student)) throw new RuntimeException("不是学生"); student t = (student)obj; if(this.age > t.age) return 1; if(this.age==t.age) return this.name.compareTo(t.name);//如果年龄相同,在比较姓名排序 return -1; } public String getName() { return name; } public int getAge() { return age; } }
compareTo
int compareTo(T o)
Compares the order of this object with the specified object. If the object is less than, equal to, or greater than the specified object, returns a negative integer, zero, or a positive integer respectively.
The implementation class must ensure that the relationship sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) exists for all x and y. (This means that if y.compareTo(x)
throws an exception, then x.compareTo(y)
also throws an exception.)
Implementation The class must also ensure that the relationship is transitive: (x.compareTo(y)>0 && y.compareTo(z)>0) means x.compareTo(z)>0.
Finally, the implementer must ensure that x.compareTo(y)==0 means that for all z, there exists sgn(x.compareTo(z)) == sgn(y.compareTo(z)). (x.compareTo(y)==0) == (x.equals(y)) is highly recommended, but it is not strictly required. In general, any class that implements the Comparable interface and violates this condition should clearly indicate this fact. It is recommended to elaborate like this: "Note: This class has a natural ordering that is inconsistent with equals."
In the previous description, the symbol sgn(expression)
specifies the signum mathematical function, which is based on expression If the value of is negative, zero, or positive, a value of -1, 0, or 1 is returned respectively.
Parameters:
o - The object to be compared.
Returns:
A negative integer, zero, or a positive integer, depending on whether this object is less than, equal to, or greater than the specified object.
Throws:
ClassCastException - If the type of the specified object does not allow it to be compared with this object.
The above is the detailed content of Example of how to use TreeSet to sort by age and name in Java. For more information, please follow other related articles on the PHP Chinese website!