一天一个类,一点也不累。

现在要说的是---TreeSet

public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, Serializable

说句实话自己没怎么用过这个*_*

--》A NavigableSet implementation based on a TreeMap. The elements are ordered using their natural ordering, or by a Comparator provided at set creation time, depending on which constructor is used.

如上,TreeSet实现了NavigableSet,这就要求元素是按照自然顺序来排序的或者使用Comparator比较器来实现

--》This implementation provides guaranteed log(n) time cost for the basic operations (addremove and contains).

  像上面说的一些基本操作他们的时间复杂度在Log(n)

--》Note that this implementation is not synchronized

还是这句话,他也是非线程安全的。

感谢!!~~ 同样给我们提供了线程安全的方式:

  SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));

【TreeSet的内部实现也是使用TreeMap来实现的】

1、构造方法:

  他提供了很多种的构造方法

  public TreeSet();

  public TreeSet(Comparator<? super E> comparator);

  public TreeSet(Collection<? extends E> c)

  public TreeSet(SortedSet<E> s)

2、迭代器

  是否大家还记得LinkedList提供了一种倒序迭代器。同样TreeSet也提供了。

   public Iterator<E> iterator() {
return m.navigableKeySet().iterator();
}

由于在TreeSet中维护这一个NavigableSet m,所有迭代器的返回只使用了他的KeySet的迭代器。

3、一些特殊的使用方法:

  public E first() {

    return m.firstKey();
  } 获取第一个元素

同样也有获取最后一个元素last()

  public E lower(E e) {
return m.lowerKey(e);
}

获取比e小的最接近的元素。

    public E floor(E e) {
return m.floorKey(e);
}

获取大于或者等于e的最小元素

与之相对的ceiling

与lower相对的是higher

想要学好这个类首先要了解NavigableSet

一天一个类,一点也不累之TreeSet的更多相关文章

  1. 一天一个类,一点也不累 之 Set接口

    我们的口号是:一天一个类,一点也不累-- 再次回忆一下集合相关的类图. 官方API上这样介绍这个接口: A collection that contains no duplicate elements ...

  2. 一天一个类,一点也不累 之 LinkedList

    我们的口号是,一天一个类,一点也不累 .. 今天要讲的是---LinkedList 首先,还是看看他的组织结构 Class LinkedList<E> java.lang.Object j ...

  3. 一天一个类,一点也不累 之 Vector

    一天一个类,一点也不累. 今天要说的是ArrayList的亲兄弟--Vector 亲兄弟?看看“族谱” Class Vector<E> java.lang.Object java.util ...

  4. 一天一个类,一点也不累之HashSet

    最近忙着一个小项目结题,故没能按时完成[一天一个类,一点也不累],还好项目优秀,算是对自己一点点的安慰和鼓励.~~~ 今天要说的是HashSet 既然是继承自Set,那么就必须有Set的一些属性,比如 ...

  5. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

  6. java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素

    Set类及子类: TreeSet有序子类: HashSet无序(散列)子类 HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外). Set<String> allSet ...

  7. java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)

    当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...

  8. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  9. [转]自己写PHP扩展之创建一个类

    原文:http://www.imsiren.com/archives/572 比如我们要创建一个类..PHP代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

随机推荐

  1. 讲讲金融业务(一)--自助结算终端POS

    之前在群里和大家聊天的时候,发现好多人对银行业务比較感兴趣,或许是由于大家对银行不了解,以为非常神奇的样子.全部,从这周開始我打算把我肚子里的墨水慢慢地倒出来,和大家分享分享.   在技术还不发达的时 ...

  2. Bitmap recycle()

    Bitmap调用recycle? When? Bitmap有一个recycle方法,意思非常easy,回收Bitmap的空间. Q 1: Bitmap是否有调用recycle方法的必要性? A: 嵌入 ...

  3. C++模板编程

    如何处理函数模板中的函数体? 预备知识补充: 按照c++的语言系统,普通函数及类的声明应该放在一个头文件中(通常是.h. .hpp..hh为扩展名)里: 而将其实现放在一个主代码文件中(通常以.c . ...

  4. js动画学习(四)

    七.多属性封装函数 前面分别介绍了单独改变单一属性值得动画,从本节起开始介绍多属性封装函数,一个函数搞定多种属性值的改变. 首先介绍一个很重要的函数getStyle(),这个函数返回一个元素的当前属性 ...

  5. CodeFirst-Section1之小例子

    尽可能做到不说一些晦涩难懂的语言,Follow Me...... 环境:Visual Studio 2013+.Net Framework 4.5 1.什么是Code First? 说白了就是先建好C ...

  6. Oracle创建表、索引、主键、字段描述

    -- 创建表 create table SX04_LBALANCE ( YEAR VARCHAR2(10) not null, PROGRAMNO VARCHAR2(40) not null, FDA ...

  7. C# Best Practices - Creating Good Properties

    Coding Properties Code in the Getter Check the user's credentials Check application state Format the ...

  8. Object lifetime

    Object lifetime Temporary object lifetime Storage reuse Access outside of lifetime Every object has ...

  9. 「OC」构造方法和分类

    一.构造方法 (一)构造方法的调用 创建一个可用的对象:Person *p=[Person new]; new方法实际上是分为两步来创建一个对象: 1)使用+alloc方法来分配存储空间(返回分配的对 ...

  10. Java基础之编程语法(一)

    1.基本格式 所有Java代码都应该在一个class中. Java是严格区分大小写的. Java是一种自由格式的语言.Java代码分为结构定义语句和功能执行语句,功能执行语句最后必须以分号结束. 2. ...