# 集合框架概述

集合框架将介绍以下几个点。让你了解什么是集合,以及如何使用。您将了解构成 Java 集合框架的核心元素 - 接口、实现、聚合操作和算法

  • 简介 他们会如何让你的工作更轻松,你的程序更好。您将了解构成的集合框架的核心要素:接口、实现和算法。

  • 接口 描述了核心集合接口,这是 Java Collections Framework 的心脏和灵魂。 您将学习有效使用这些接口的一般准则,包括何时使用哪个接口。您还将学习每个接口的示例语法,这将帮助您充分利用接口。

  • 聚合操作 如何编写高效优雅的迭代操作代码- 大部分讲的 JDK8+ 的流操作。

  • 实现 描述 JDK 的通用集合的实现 ,并告诉您何时使用哪种实现。您还可以了解包装的实现,这在通用实现添加功能。

  • 算法 描述的多态算法由 JDK 提供的集合操作。运气好的话,你永远不会再写自己的排序程序了!

  • 自定义实现 告诉你为什么,你可能要编写自己的集合实现(而不是使用由 JDK 提供的通用实现之一),以及你如何去了解它。这很容易与 JDK 的抽象集合的实现!

  • 互操作性 告诉你怎么兼容老旧的 API 集合,此外,它还告诉您如何设计新的 API,以便与其他新 API 无缝互操作。

# 介绍

一个集合代表一组对象,集合框架是用于表示和操纵集合的统一架构,使得集合能够独立于实现细节被操作。

集合框架包括:

  • 集合接口

    表示不同类型的集合,例如 sets、lists and maps。这些接口构成了框架的基础。

  • 通用实现

    集合接口的主要实现。

  • 传统实现

    来自早期版本的集合类,Vector 和 Hashtable,被改造以实现集合接口。

  • 专用实现

    实施设计用于特殊情况。这些实现显示非标准性能特性,使用限制或行为。

  • 并发实现

    实现设计用于高并发使用。

  • 包装器实现

    向其他实现添加功能(如同步)。

  • 方便实现

    集合接口的高性能“小型实现”。

  • 抽象实现

    部分实现集合接口以方便定制实现。

  • 算法

    对集合执行有用函数的静态方法,例如排序列表。

  • 基础设施

    为集合接口提供必要支持的接口。

  • 数组实用程序

    基本类型和引用对象数组的效用函数。严格来说,不是集合框架的一部分,这个特性在集成框架的同时被添加到 Java 平台,并依赖于一些相同的基础设施。

# 集合接口

集合接口被分成两组。最基本的接口 java.util.Collection 具有以下后代:

  • java.util.Set
  • java.util.SortedSet
  • java.util.NavigableSet
  • java.util.Queue
  • java.util.concurrent.BlockingQueue
  • java.util.concurrent.TransferQueue
  • java.util.Deque
  • java.util.concurrent.BlockingDeque

其他集合接口基于 java.util.Map,而不是真正的集合。但是,这些接口包含收集视图操作,这使得它们可以作为集合操作。map 有以下子代:

  • java.util.SortedMap
  • java.util.NavigableMap
  • java.util.concurrent.ConcurrentMap
  • java.util.concurrent.ConcurrentNavigableMap

集合集合接口中的许多修改方法都是可选的。实现的时候可选支持一个或多个,不支持的方法在尝试执行时抛出运行时异常(UnsupportedOperationException)。

有以下几个术语:

  • 不支持修改的操作(如 add、remove、clear)
  • 不可变集合
  • 集合的大小不可变
  • 支持随机访问列表,不支持的称为顺序访问列表,通过 RandomAccess 接口标记,使得通用算法可以改变其行为

还有一些限制可以存储什么元素,如 map 的 key 和 value 可能要求:

  • 是一种特殊的类型
  • 不是 null

试图添加违反实现的限制的元素会导致运行时异常,通常是 ClassCastException、IllegalArgumentException 或 NullPointerException。 尝试删除或测试是否存在违反实现的限制的元素可能会导致异常。一些受限制的集合允许这种使用。

# 集合实现

实现集合接口的类通常具有 < Implementation-style > < Interface > 形式的名称。下表总结了通用实现:

接口 哈希表 可变数组 平衡二叉树 链表 哈希表+链表
Set HashSet - TreeSet - LinkedHashSet
List - ArrayList - LinkedList -
Deque - ArrayDeque - LinkedList -
Map HashMap - TreeMap - LinkedHashMap

# 并发集合

多个线程使用的集合,称为并发编程。

接口:

  • BlockingQueue
  • TransferQueue
  • BlockingDeque
  • ConcurrentMap
  • ConcurrentNavigableMap

实现类:

  • LinkedBlockingQueue
  • ArrayBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue
  • SynchronousQueue
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • ConcurrentSkipListSet
  • ConcurrentHashMap
  • ConcurrentSkipListMap

原文 https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html