`
nenty
  • 浏览: 112255 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java集合接口(4)

阅读更多
6、java.util.TreeMap
java.lang.Object
   java.util.AbstractMap
       java.util.TreeMap
所有已实现的接口:Serializable, Cloneable, Map, SortedMap
SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。
此实现为 containsKey、get、put 和 remove 操作提供了保证的 log(n) 时间开销。这些算法是 Cormen、Leiserson 和 Rivest 的《Introduction to Algorithms》中的算法的改编。
注意,如果有序映射要正确实现 Map 接口,则有序映射所保持的顺序(无论是否明确提供比较器)都必须保持与等号一致。(请参见与等号一致 的精确定义的 Comparable 或 Comparator。)这也是因为 Map 接口是按照等号操作定义的,但映射使用它的 compareTo(或 compare)方法对所有键进行比较,因此从有序映射的观点来看,此方法认为相等的两个键就是相等的。即使顺序与等号不一致,有序映射的行为仍然是 定义良好的;只不过没有遵守 Map 接口的常规约定。
注意,此实现不是同步的。如果多个线程同时访问一个映射,并且其中至少一个线程从结构上修改了该映射,则其必须 保持外部同步。(结构上修改是指添加或删除一个或多个映射关系的操作;仅改变与现有键关联的值不是结构上的修改。)这一般通过对自然封装该映射的某个对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的不同步访问,如下所示:
     Map m = Collections.synchronizedMap(new TreeMap(...));
由所有此类的“collection 视图方法”所返回的迭代器都是快速失败 的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
此类是Java Collections Framework 的成员。
从以下版本开始: 1.2
7、java.util.TreeSet
java.lang.Object
   java.util.AbstractCollection
       java.util.AbstractSet
           java.util.TreeSet
所有已实现的接口:Serializable, Cloneable, Iterable, Collection, Set, SortedSet
此类实现 Set 接口,该接口由 TreeMap 实例支持。此类保证排序后的 set 按照升序排列元素,根据使用的构造方法不同,可能会按照元素的自然顺序 进行排序(参见 Comparable),或按照在创建 set 时所提供的比较器进行排序。
此实现为基本操作(add、remove 和 contains)提供了可保证的 log(n) 时间开销。
注意,如果要正确实现 Set 接口,则 set 所维护的顺序(是否提供了显式比较器)必须为与等号一致(请参阅与等号一致 精确定义的 Comparable 或 Comparator)。这是因为 Set 接口根据 equals 操作进行定义,但 TreeSet 实例将使用其 compareTo(或 compare)方法执行所有的键比较,因此,从 set 的角度出发,该方法认为相等的两个键就是相等的。即使 set 的顺序与等号不一致,其行为也是 定义良好的;它只是违背了 Set 接口的常规协定。
注意,此实现不是同步的。如果多个线程同时访问一个 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步。通常通过对某个自然封装该 set 的对象进行同步来实现此操作。如果不存在此类对象,则 set 就应该使用 Collections.synchronizedSet 方法进行“包装”。此操作最好在创建时进行,以防止对 set 的意外非同步访问:
     SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
此类的 iterator 方法返回的迭代器是快速失败的:如果在迭代器创建后的任意时间修改 set(通过迭代器本身 remove 方法之外的任何其他方式),迭代器将抛出 ConcurrentModificationException。因此,在并发修改时,迭代器将快速而彻底地失败,而不会在以后的不确定时间有出现任意、无法确定行为的危险。
注意,无法保证迭代器的快速失败行为,因为通常来说,不可能在非同步并发修改的情况下提供任何硬性保证。快速失败的迭代器将尽量抛出 ConcurrentModificationException。因此,为了获得其准确性而编写依赖此异常的程序的做法是错误的:迭代器的快速失败行为应当仅用于检测 bug。
8、java.util.HashSet
java.lang.Object
   java.util.AbstractCollection
       java.util.AbstractSet
           java.util.HashSet
所有已实现的接口:
Serializable, Cloneable, Iterable, Collection, Set
直接已知子类:
JobStateReasons, LinkedHashSet
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
此类为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和 size,假定哈希函数将这些元素正确地分布在桶中。对此集合进行迭代所需的时间与 HashSet 实例的大小(元素的数量)和底层 HashMap 实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
注意,此实现不是同步的。 如果多个线程同时访问一个集合,而其中至少一个线程修改了该集合,那么它必须 保持外部同步。这通常是通过对自然封装该集合的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来“包装”集合。最好在创建时完成这一操作,以防止对 HashSet 实例进行意外的不同步访问:
     Set s = Collections.synchronizedSet(new HashSet(...));
此类的 iterator 方法返回的迭代器是快速失败 的:在创建迭代器之后,如果对集合进行修改,除非通过迭代器自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来在某个不确定时间发生任意不确定行为的风险。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器在尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测程序错误。

分享到:
评论

相关推荐

    java集合思维导图

    除了这些基本接口,还有`Collection`接口,它是所有集合接口的父接口,包含了集合的基本操作。`Map`接口则用来存储键值对,典型实现有`HashMap`、`TreeMap`、`LinkedHashMap`等。 Java集合框架还包含了一些工具类,...

    java 集合

    本文将深入探讨Java集合框架的基础知识,包括接口、类、以及它们在实际开发中的应用。 首先,Java集合框架由一系列接口和实现这些接口的类组成。主要的接口有`List`、`Set`和`Queue`,它们各自代表了不同特性的数据...

    java泛型集合 java集合 集合 java Collection

    Java集合框架是一个包含多种数据结构(如列表、集、队列等)的API,这些数据结构由接口(如`Collection`、`List`、`Set`和`Queue`)和实现这些接口的类(如`ArrayList`、`HashSet`和`LinkedList`)组成。`Collection...

    java 接口练习作业

    Java集合框架包括List、Set、Queue等接口,它们定义了对数据进行操作的一系列规范。例如,`List`接口代表有序的、可重复的元素集合,提供了添加、删除、查找和遍历元素的方法。常见的实现类有ArrayList和LinkedList...

    Java集合排序及java集合类详解

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...

    JAVA 1.7集合(接口)框架图

    涵盖几乎所有JAVA 1.7的集合框架(由1.7官网总结)

    Java集合框架总结

    - **集合接口**:主要包括`Collection`、`Set`、`List`和`Map`等接口。 - **抽象类**:提供了部分接口的默认实现,如`AbstractCollection`、`AbstractList`、`AbstractSet`和`AbstractMap`。 - **实现类**:具体实现...

    java 集合部分笔记

    【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...

    Java集合排序及java集合类详解.pdf

    Collection是Java集合框架中最重要的接口之一,它是所有单列集合的根接口。 ##### 1.2 Collection - **常用方法**: - `add(E e)`:向集合添加一个元素。 - `remove(Object o)`:从集合中移除指定元素。 - `...

    Java基础篇:Java集合.pdf

    该文档主要详细总结了Java集合的相关知识,包括Collection和Map接口、Collection接口的子接口List和Set接口以及具体的实现类、存储原理等;Map接口的子接口HashMap、LinkedHashMap、TreeMap、Properties等

    Java集合思维导图.xmind.zip

    4. **LinkedList**: LinkedList实现了List接口,每个元素都是一个节点,包含前后引用,因此在插入和删除操作上具有优势,但在随机访问时效率较低。LinkedList还提供了双端队列(Deque)的功能,可以在两端添加和移除...

    Java集合详解,详细讲解java的集合类

    Collection是最基本的集合接口,它代表一组Object,即它的元素。Collection接口定义了一些基本操作,如add、remove和contains等。同时,Collection接口提供了iterator()方法,使得可以通过迭代器遍历集合中的每个...

    java集合知识大全

    Java集合框架的设计采用了面向对象的思想,通过接口和抽象类构建了一个层次化的结构。下面是一个简化的继承关系图: - `java.util.Collection`: 所有单列集合的根接口。 - `java.util.List`: 元素有序且可重复。 ...

    一个讲解很清晰的Java集合框架PPT

    Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组接口和类,用于高效地存储、管理和操作数据。这个“一个讲解很清晰的Java集合框架PPT”显然是一个对外公开的教育资源,旨在帮助学习者深入理解Java集合...

    java集合类线程安全.doc

    实现是指表示这些集合接口的具体实现,实质上是可重用的数据结构,即通用集合类。算法是指可以对实现集合接口的类进行一些实用计算的方法,比如排序和查找。 Java 集合框架的接口层次和通用实现如下: 图 1 Java ...

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    java集合详解.pdf

    Java 集合详解 Java 集合框架是 Java 语言中最重要的一部分,掌握集合框架可以让开发者更好地进行 Java 编程。下面将详细介绍 Java 集合框架的实现原理和使用方法。 1.1 集合框架概述 Java 集合框架是 Java 语言...

    Java集合类性能分析

    - **集合接口**:Java集合框架中有六种主要的集合接口,它们分别是`Collection`、`List`、`Set`、`Queue`、`Deque`和`Map`。这些接口构成了整个集合框架的基础,定义了集合类应该具备的基本行为和功能。 - `...

Global site tag (gtag.js) - Google Analytics