TreeSet是属于Set集合的一个集合,继承了Set的特点:无序不可重复,同时还具有自己的特性:可以使数据自动排序
如果想实现TreeSet集合的自动排序很简单(上代码)
public class Map06 { public static void main(String[] args) { // 这个类型就不用进行实现接口的操作了,因为已经在源码上定义好了 Set<Integer> set = new TreeSet<>(); set.add(1); set.add(90); set.add(34); set.add(4); for(Integer i : set){ System.out.println(i); } } }
输出的结果是这样的1 4 34 90
就实现了数据的自动排序,也如上面所说Integer不用实现接口就能自动排序,因为已经在源码上定义了
但如果是自己定义的类想实现自动排序的话,就必须实现comparable接口
public class Map06 { public static void main(String[] args) {
Users u1 = new Users("zhangzz",20); Users u2 = new Users("zhangsa",20); Users u3 = new Users("mike",18); Users u4 = new Users("joke",12); Set<Users> set1 = new TreeSet<>(); set1.add(u1); set1.add(u2); set1.add(u3); set1.add(u4); for(Users users : set1){ System.out.println(users); } } }
class Users implements Comparable<Users>{ String name; int age; public Users(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Users{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Users u) { if(this.age == u.age){ return this.name.compareTo(u.name); }else{ return this.age - u.age; } } }
这里是自己定义的Users类,想要里面的数据实现自动排序,就必须要实现comparable了,当然还要重写toString方法,要不然输出的就是内存地址了
在实现接口的同时还要进行重写里面的compareTo接口,内容是自己定义的,
这个需求是
按年龄的大小进行自动排序,如果年龄相同,则按name的大小顺序进行排序
因此运用for循环然后return输出,
以上就是TreeSet集合自定义类的自动排序问题了。。