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;
//        }
//
//    }
    
}
    

打印结果为:

posted @ 2020-03-24 21:28  苏胖胖  阅读(182)  评论(0)    收藏  举报