》要實現自然排序,對象集合必須實現Comparable接口,並重寫compareTo()方法
》一般需求中描述的是“主要條件”,如:按姓名長度排序。 需注意次要條件 如:長度相同時,姓名內容,年齡等條件是否相等,這決定着是否存入TreeSet集合。
package cn.itcast.day21.treeset; /* * 要實現自然排序,就一定要實現Comparable接口,並重寫compareTo()方法 * * 若不實現Comparable接口,而把對象往TreeSet中添加,就會報ClassCastException * 原因:java.util.TreeMap.put(TreeMap.java:542) * Comparable<? super K> k = (Comparable<? super K>) key;//key=集合元素,被強行轉換成接口類型 * */ public class Student implements Comparable<Student>{ private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student o) { int num=this.getName().length()-o.getName().length(); int num2=num==0?this.getName().compareTo(o.getName()):num; int num3=num2==0?this.getAge()-o.getAge():num2; return num3; } }
package cn.itcast.day21.treeset; import java.util.TreeSet; /* * TreeSet 按照自定義對象Student的姓名長度自然排序 * * * 分析: * A:實現自然排序,元素的類就要實現Comparable接口,並重寫compareTo()方法 * B:主要條件 姓名長度 * C:次要條件 姓名內容,年齡 */ public class TreeSetDemo { public static void main(String[] args) { //創建集合對象 TreeSet<Student> ts=new TreeSet<Student>(); //創建元素對象 Student s1=new Student("linqingxia",27); Student s2=new Student("wuqilong",27); Student s3=new Student("wanglihong",34); Student s4=new Student("zhouxingchi",57); Student s5=new Student("linqingxia",28); Student s6=new Student("linqingxia",27); //添加集合元素 ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); ts.add(s6); //遍歷集合 for(Student s:ts){ System.out.println(s.getName()+"-----"+s.getAge()); } } } /** 運行結果: wuqilong-----27 linqingxia-----27 linqingxia-----28 wanglihong-----34 zhouxingchi-----57 */