zoukankan      html  css  js  c++  java
  • 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次比较,才能找到新元素的正确位置。

      

  • 相关阅读:
    vmware ubuntu 异常关机无法连接到网络
    Speed up GCC link
    常用的一些解压命令
    Log4j 漏洞复现
    Test Case Design method Boundary value analysis and Equivalence partitioning
    CCA (Citrix Certified Administrator) exam of “Implementing Citrix XenDesktop 4”
    What is Key Word driven Testing?
    SAP AGS面试小结
    腾讯2013终端实习生一面
    指针的引用
  • 原文地址:https://www.cnblogs.com/xujian2014/p/5334937.html
Copyright © 2011-2022 走看看