JavaJava学习笔记Jave Web MGO开发

Java 性能调优指南之 Java 集合概览

2016-05-12  本文已影响362人  OneAPM_Official

【编者按】本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型。文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文:

本文将概览所有标准的 Java 集合类型。我们将按照它们可区分的属性与主要用例进行分类。除此之外,我们还将穷举在不同集合类型之间进行数据转换的方法。

数组(Arrays)

数组是 Java 语言内置的唯一集合类型,尤其擅长处理预先知道数量上限的元素集。java.util.Arrays 包含了许多用于处理数组的方法,列举如下:

如果需要将部分数组(或整个数组)拷贝到另一个已有数组,你需要调用 System.arraycopy 方法,后者会将源数组中指定位置的给定数量的元素拷贝到目的数组的指定位置。通常,这是在 Java 中拷贝数组内容的最快方式(不过,在某些情况下,你也可以检查一下 ByteBuffer 批量拷贝的速度是否更快)。

最后,还有一点,任何 Collection(集合) 都可以使用 T[] Collection.toArray( T[] a ) 方法拷贝到数组中。此方法调用的常见模式如下:

return coll.toArray( new T[ coll.size() ] );

此方法调用会分配足够大的数组以存储整个集合,因此 toArray 不必要分配很大的数组用于返回。

单线程集合(Single-threaded collections)

本部分将重点介绍非线程安全(non-thread-safe)集合。这些集合全都存储于 java.util 包中。其中一些集合类型从 Java 1.0 开始就有了,现在已经不再建议使用(deprecated),但大多数集合类型从 Java 1.4 开始启用。枚举集合(Enum collections)自 Java 1.5 开始出现,同时具备所有集合类的泛型支持。PriorityQueue 也是从 Java 1.5 开始启用的。非线程安全集合框架的最新成员是自 Java 1.6 起推出的 ArrayDeque。

Lists(列表)

Queues(队列)/deques(双队列)

Maps(映射)

Sets(集合)

java.util.Collections

就像针对数组的 java.util.Arrays 包一样,java.util.Collections 包提供了许多处理集合的好方法。

本文将要介绍的第一组方法会返回集合的各种视图:

本文介绍的第二组方法都因为相同的原因被排除在集合之外:

并发集合

本部分将介绍 java.util.concurrent 包中提供的线程安全(thread-safe)集合类型。这些集合的主要特性在于能确保其方法的原子执行(atomic execution)。不过,不要忘记,涉及多个方法调用的 “add-or-update” 或 “check-then-update” 等复合动作(compound actions)仍然应该同步。因为,在复合动作第一步中查询到的信息在执行第二个步骤之前可能已经失效。

大多数并发集合类型从 Java 1.5 开始引入。ConcurrentSkipListMap / ConcurrentSkipListSet 以及 LinkedBlockingDeque 是在 Java 1.6 开始启用的。在 Java 1.7 中的最近更新为 ConcurrentLinkedDeque 与 LinkedTransferQueue 的加入。

Lists(列表)

Queues(队列)/deques(双队列)

Maps(映射)

Sets(集合)

另请参阅

推荐阅读

如果你想对 Java 集合类有更深入的了解,笔者建议你从下面的书中找一本阅读。

总结

以下是所有 JDK 集合类的简单总结:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

OneAPM 能为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

原文地址:http://java-performance.info/java-collections-overview/

上一篇下一篇

猜你喜欢

热点阅读