虹口房产网站建设,圣诞节网站怎么做,百度信息流广告投放,网站流程示意TreeSet的特点#xff1a;可排序、不重复、无索引。可排序#xff1a;按照元素的大小默认升序排序#xff1b;底层是基于红黑树的数据结构实现排序的#xff0c;增删改查性能都较好。对于数值、字符串类型的#xff08;Integer 、Double、String#xff09;TreeSet可以排…TreeSet的特点可排序、不重复、无索引。可排序按照元素的大小默认升序排序底层是基于红黑树的数据结构实现排序的增删改查性能都较好。对于数值、字符串类型的Integer 、Double、StringTreeSet可以排序而对于自定义类型对象就不能直接排序。示例1对于以下类
class StudentT {int Id;String name;int age;public StudentT(int Id,String name,int age){this.IdId;this.namename;this.ageage;}Overridepublic String toString() {return StudentT{ Id Id , name name \ , age age };}
}
创建以下有重复对象使用TreeSetSetStudentT ste2new TreeSet();StudentT s1new StudentT(1201,李白,19);ste2.add(new StudentT(1201,李白,19));ste2.add(new StudentT(1230,李思,18));ste2.add(new StudentT(1206,张三,19));ste2.add(new StudentT(1201,李白,19));System.out.println(ste2);运行结果Exception in thread main java.lang.ClassCastException: class set_1.StudentT cannot be cast to class java.lang.Comparable (set_1.StudentT is in unnamed module of loader app; java.lang.Comparable is in module java.base of loader bootstrap)at java.base/java.util.TreeMap.compare(TreeMap.java:1569)*****************************at set_1.TreeSet1.main(TreeSet1.java:22)这就是说想要使用TreeSet存储自定义类型需要制定排序规则自定义排序规则两种让自定义的类实现Comparable接口重写里面的compareTo方法来定制比较规则。class StudentT implements ComparableStudentT{int Id;
//***********省略同上部分内容*******************Overridepublic int compareTo(StudentT o) {return this.Id-o.Id;//选择你需要的排序内容返回值大于0表示是升序}
}TreeSet集合有参数构造器可以设置Comparator接口对应的比较器对象来定制比较规则。优先级更高 SetStudentT ste2new TreeSet(new ComparatorStudentT() {Overridepublic int compare(StudentT o1, StudentT o2) {return o1.getId()-o2.getId();}});