🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# [第十二章 集合](https://lingcoder.gitee.io/onjava8/#/book/12-Collections?id=%e7%ac%ac%e5%8d%81%e4%ba%8c%e7%ab%a0-%e9%9b%86%e5%90%88) > 如果一个程序只包含固定数量的对象且对象的生命周期都是已知的,那么这是一个非常简单的程序。 通常,程序总是根据运行时才知道的某些条件去创建新的对象。在此之前,无法知道所需对象的数量甚至确切类型。为了解决这个普遍的编程问题,需要在任意时刻和任意位置创建任意数量的对象。因此,不能依靠创建命名的引用来持有每一个对象: ~~~ MyType aReference; ~~~ 因为从来不会知道实际需要多少个这样的引用。 大多数编程语言都提供了某种方法来解决这个基本问题。Java有多种方式保存对象(确切地说,是对象的引用)。例如前边曾经学习过的数组,它是编译器支持的类型。数组是保存一组对象的最有效的方式,如果想要保存一组基本类型数据,也推荐使用数组。但是数组具有固定的大小尺寸,而且在更一般的情况下,在写程序的时候并不知道将需要多少个对象,或者是否需要更复杂的方式来存储对象,因此数组尺寸固定这一限制就显得太过受限了。 **java.util**库提供了一套相当完整的*集合类*(collection classes)来解决这个问题,其中基本的类型有**List**、**Set**、**Queue**和**Map**。这些类型也被称作*容器类*(container classes),但我将使用Java类库使用的术语。集合提供了完善的方法来保存对象,可以使用这些工具来解决大量的问题。 集合还有一些其它特性。例如,**Set**对于每个值都只保存一个对象,**Map**是一个关联数组,允许将某些对象与其他对象关联起来。Java集合类都可以自动地调整自己的大小。因此,与数组不同,在编程时,可以将任意数量的对象放置在集合中,而不用关心集合应该有多大。 尽管在 Java 中没有直接的关键字支持,\[^1\]但集合类仍然是可以显著增强编程能力的基本工具。在本章中,将介绍 Java 集合类库的基本知识,并重点介绍一些典型用法。这里将专注于在日常编程中使用的集合。稍后,在[附录:集合主题](https://lingcoder.gitee.io/onjava8/#/)中,还将学习到其余的那些集合和相关功能,以及如何使用它们的更多详细信息。