美文网首页
TreeSet源码学习

TreeSet源码学习

作者: supory | 来源:发表于2018-03-08 11:48 被阅读4次

/** * A {@link NavigableSet} implementation based on a {@link TreeMap}. * The elements are ordered using their {@linkplain Comparable natural * ordering}, or by a {@link Comparator} provided at set creation * time, depending on which constructor is used. * *

This implementation provides guaranteed log(n) time cost for the basic

* operations ({@code add}, {@code remove} and {@code contains}).

*

*

Note that the ordering maintained by a set (whether or not an explicit * comparator is provided) must beconsistent with equalsif it is to * correctly implement the {@code Set} interface.  (See {@code Comparable} * or {@code Comparator} for a precise definition ofconsistent with

* equals.)  This is so because the {@code Set} interface is defined in * terms of the {@code equals} operation, but a {@code TreeSet} instance * performs all element comparisons using its {@code compareTo} (or * {@code compare}) method, so two elements that are deemed equal by this method * are, from the standpoint of the set, equal.  The behavior of a set *iswell-defined even if its ordering is inconsistent with equals; it * just fails to obey the general contract of the {@code Set} interface. * *

Note that this implementation is not synchronized.* If multiple threads access a tree set concurrently, and at least one * of the threads modifies the set, itmustbe synchronized * externally.  This is typically accomplished by synchronizing on some * object that naturally encapsulates the set. * If no such object exists, the set should be "wrapped" using the * {@link Collections#synchronizedSortedSet Collections.synchronizedSortedSet} * method.  This is best done at creation time, to prevent accidental * unsynchronized access to the set:

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

* *

The iterators returned by this class's {@code iterator} method are *fail-fast: if the set is modified at any time after the iterator is * created, in any way except through the iterator's own {@code remove} * method, the iterator will throw a {@link ConcurrentModificationException}. * Thus, in the face of concurrent modification, the iterator fails quickly * and cleanly, rather than risking arbitrary, non-deterministic behavior at * an undetermined time in the future. * *

Note that the fail-fast behavior of an iterator cannot be guaranteed * as it is, generally speaking, impossible to make any hard guarantees in the * presence of unsynchronized concurrent modification.  Fail-fast iterators * throw {@code ConcurrentModificationException} on a best-effort basis. * Therefore, it would be wrong to write a program that depended on this * exception for its correctness:the fail-fast behavior of iterators

* should be used only to detect bugs.* *

This class is a member of the * * Java Collections Framework. * * @param the type of elements maintained by this set

*

* @author  Josh Bloch

* @see    Collection

* @see    Set

* @see    HashSet

* @see    Comparable

* @see    Comparator

* @see    TreeMap

* @since  1.2

*/

相关文章

  • TreeSet源码学习

    /** * A {@link NavigableSet} implementation based on a {@...

  • java8中treeset源码分析

    大纲 treeset原理分析 treeset源码分析 1. treeset原理分析 treeset中的数据是唯一的...

  • 什么是红黑树?

    最近研究JDK源码的时候,发现TreeMap和TreeSet底层数据结构是红黑树,当然,TreeSet其实本质上就...

  • java源码-TreeSet

    开篇  TreeSet作为HashSet的姊妹类型,TreeSet是用来排序的, 可以指定一个顺序, 对象存入之后...

  • TreeSet源码分析

    TreeSet TreeSet简介 TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于Ab...

  • TreeSet源码初探

    附图: 前言: TreeSet是一个有序的集合,它的作用是提供有序的Set集合。底层数据结构是红黑树(是一种自平衡...

  • TreeSet源码分析

    源码来自jdk1.8 实现了NavigableSet接口 内部实现依赖于TreeMap add, remove, ...

  • Comparable/Comparator分析

    源码来自jdk1.8 TreeMap, TreeSet, PriorityQueue等天生有序的数据结构,或是Ar...

  • HashSet LinkedHashSet TreeSet 源码

    Set 是一种去重的数据结构,经常可以使用到,而HashSet,LinkedHashSet, TreeSet是最...

  • TreeSet源码分析详解

    TreeSetTreeSet简介java.lang.Object↳ java.util.AbstractC...

网友评论

      本文标题:TreeSet源码学习

      本文链接:https://www.haomeiwen.com/subject/asfjfftx.html