Java学习day28-TreeSet集合
一、TreeSet
1.TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet采用自然排序。
2.自然排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列。
①如果this > obj,返回正数1
②如果this < obj,返回负数-1
③如果this = obj,返回0,则默认为这两个对象相等
注意:必须放入同样类的对象(默认会进行排序)否则可能会发生类型转换异常。我们可以使用泛型来进行限制。
package day16; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Test4 { public static void main(String[] args){ Set<Integer> set = new TreeSet<Integer>(); //TreeSet自然排序 set.add(5); set.add(2); set.add(4); set.add(3); System.out.println(set); set.remove(4); set.contains(3);//判断是否包含元素 // set.clear();//清空元素 //使用迭代器遍历集合 Iterator<Integer> it = set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } //for each迭代集合 for(Integer i : set){ System.out.println(i); } } }
打印结果:

3.定制排序
如果需要实现定制排序,则需要在创建TreeSet集合对象时,提供一个Comparator接口的实现类对象,由该Comparator负责集合元素的排序逻辑。
package day16; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; public class Test4 { public static void main(String[] args){ Person p1 = new Person("张三",23); Person p2 = new Person("李四",20); Person p3 = new Person("王五",16); Person p4 = new Person("马六",29); Set<Person> set = new TreeSet<Person>(new Person()); set.add(p1); set.add(p2); set.add(p3); set.add(p4); for(Person p :set){ System.out.println(p.name + " " + p.age); } } } class Person implements Comparator<Person>{//把Person对象存到TreaSet中并按照年龄排序 int age; String name; public Person(){ } public Person(String name, int age){ this.name = name; this.age = age; } public int compare(Person o1, Person o2) {//年龄正序排列 // TODO Auto-generated method stub if(o1.age > o2.age ){ return 1; }else if(o1.age < o2.age){ return -1; }else{ return 0; } } // public int compare(Person o1, Person o2) {//年龄倒序排列 // // TODO Auto-generated method stub // if(o1.age < o2.age ){ // return 1; // }else if(o1.age > o2.age){ // return -1; // }else{ // return 0; // } // // } }
打印结果为:


浙公网安备 33010602011771号