Java集合之TreeSet

总结

  1. TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
  2. TreeSet 支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

自然排序

排序:TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列
如果 this > obj,返回正数 1
如果 this < obj,返回负数 -1
如果 this = obj,返回 0 ,则认为这两个对象相等
必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<Integer>();
        //添加元素
        set.add(10);
        set.add(4);
        set.add(99);
        set.add(66);
        //移除元素
        set.remove(1);
        //是否包含某种元素
        set.contains(99);
        //TreeSet自然排序
        System.out.println(set);
        
        //使用迭代器遍历集合
        Iterator<Integer> st = set.iterator();
        while(st.hasNext()) {
            System.out.println(st.next());
        }
        //使用for each迭代集合
        for(Integer i :set) {
            System.out.println(i);
        }
}

定制排序

如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,提供一个 Comparator 接口的实现类对象。由该 Comparator 对象负责集合元素的排序逻辑

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {    
        /**
         * 定制排序
         * 如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,
         * 提供一个 Comparator 接口的实现类对象。
         * 由该 Comparator 对象负责集合元素的排序逻辑
         */
        Person p5 = new Person(111,"李四");
        Person p1 = new Person(13,"张三");
        Person p2 = new Person(9,"王二");
        Person p3 = new Person(101,"李逵");
        Person p4 = new Person(111,"李某人");
        //创建一个person对象的泛型集合
        Set<Person> p = new TreeSet<Person>(new Person());
        //将对象加入集合
        p.add(p1);
        p.add(p2);
        p.add(p3);
        p.add(p4);
        p.add(p5);
        //for each遍历集合
        for(Person set1:p) {
            System.out.println(set1.age+"    "+set1.name);
        }
        
    }
}
//实现Comparator接口
class Person implements Comparator<Person>{
    int age;
    String name;
    //定义一个无参构造和有参构造
    Person() {}
    Person(int age,String name){
        this.name = name;
        this.age = age;
    }
//重写compare方法,自定义排序方式
    @Override
    public int compare(Person o1, Person o2) {
        if(o1.age>o2.age) {
            return 1;
        }else if(o1.age<o2.age) {
            return -1;
        }
        return 0;
    }}
上一篇:Java学习之路(四十三)| 集合(七)—— TreeSet


下一篇:java集合类-Set接口