Day09_45_Set集合_SortedSet02
SortedSet
* TreeSet是SortedSet接口的实现类,TreeSet底层是一个TreeMap,相当于TreeMap中的key。
* SortedSet集合是如何实现自动排序的呢?
- TreeSet集合在添加元素的时候会调用已添加元素(类)的 compareTo()方法 (U1.compareTo(U2))方法底层是一个do..while()循环。
- 如果将compareTo()方法固定返回0 (return 0),那么就会出现只能添加一个数据的结果,因为这样的话表示后面的元素和第一个元素是相等的,而TreeSet集合是不能重复的。
- 所有可以排序的类,都实现了java.lang.Comparable接口。
- Comparable接口中只有一个方法: int conpareTo(T o)
返回 0, 表示this == obj
返回正数,表示this > obj
返回负数,表示this < obj
- 自己写的类需要实现Comparable接口,然后重写compareTo()方法,才能实现自动排序
-
代码
package com.shige.Collection.Set.SortedSet; import java.util.Iterator; import java.util.SortedSet; import java.util.TreeSet; public class SortedSetTest02 { public static void main(String[] args) { // 创建集合 SortedSet users= new TreeSet();//父类引用指向子类对象 //创建用户的对象 User user1=new User(88,"CBA"); User user2=new User(23,"BAC"); User user3=new User(43,"ABC"); //添加元素 users.add(user1); users.add(user2); users.add(user3); // 遍历输出集合中的元素 Iterator iterator=users.iterator(); while(iterator.hasNext()){ Object user=iterator.next(); System.out.println(user); // 按照年龄从小到大排序输出 } } } // 用户类 class User implements Comparable{ //实现一个接口,就要重写接口中的所有方法 int age; String name; User(int age,String name){ this.age=age; this.name=name; } public String toString(){ return "User[age: "+age+"name: "+name+"]"; } // 重写Comparable接口中的compareTo方法 @Override public int compareTo(Object o) { // 用年龄age 比较 /* int age1=this.age; int age2=((User)o).age; //将O 转换为 User return age1-age2; */ //用name字段进行排序,因为String本身就实现了compareTo()方法,所以直接调用即可 return this.name.compareTo(((User)o).name); } }