Java集合之TreeSet


一、概述

  1、TreeSet(樹集)是一個有序集合,可以按照任何順序將元素插入該集合,當對該集合進行迭代時,各個值將自動以排序后的順序出現。TreeSet中的元素按照升序排列,缺省是按照自然順序進行排序,意味着TreeSet中的元素要實現Comparable接口,或者有一個自定義的比較器Comparator。

  2、TreeSet底層使用的是TreeMap,TreeMap的底層實現是紅黑樹(詳細見http://www.cnblogs.com/xujian2014/p/4645943.html)。

 public TreeSet()
 {
        this(new TreeMap<E,Object>());
 }

二、TreeSet使用示例

public class Test
{
    public static void main(String[] args)
    {
        TreeSet<String> treeSet=new TreeSet<>();
        treeSet.add("Bili");
        treeSet.add("Amy");
        treeSet.add("cDy");
        for (String string : treeSet)
        {
            System.out.println(string);
        }
 }

  由於String類實現了Comparable接口,它的compareTo方法是按照字典順序來對字符串進行排序,所以結果如下:

如果想插入自定義的對象,必須通過實現Comparable接口來定義一個排列的順序,eg:

class Person implements Comparable<Person>
{
    int age;
    String name;
    String address;
    public Person(int age, String name)
    {
        super();
        this.age = age;
        this.name = name;
    }
    @Override
    public int compareTo(Person o)
    {
        return this.age-o.age;
    }
}
public class TestMain
{
    public static void main(String[] args)
    {
        TreeSet<Person> treeSet=new TreeSet<Person>();
        treeSet.add(new Person(12, "xujian"));
        treeSet.add(new Person(6, "luyang"));
        treeSet.add(new Person(10, "xiewei"));
        for (Person person : treeSet)
        {
            System.out.println(person.name+":"+person.age);
        }
    }
}

  執行結果如下:

  

  當然也可以自定義一個比較器Comparator,實現compare方法。

  注意:

  1、TreeSet的排列順序必須是全局順序,也就是說任何兩個元素都是必須可比的,同時只有當他們比較相同時才返回0。

  2、如果樹集包含了n個元素,那么平均需要進行log2n次比較,才能找到新元素的正確位置。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM