Java 集合框架是 Java 编程中用于存储、操作和管理一组对象的类和接口的集合,位于 java.util 包下,提供了统一的架构来表示和操作对象组,具有高性能、高可维护性等特点。
为了有效地理解和使用 Java 集合框架,对其包含的接口进行简单概述是非常有用的。
Java 集合框架中有两组接口: 集合(Collection) 和 映射(Map)接口。
下面是集合(Collection)接口层次结构图:
Iterable 接口是位于 java.lang 包下的一个基础接口,它的核心作用是标记一个对象为“可迭代的”,即允许通过迭代器(Iterator)遍历其内部包含的元素。所有实现了 Iterable 接口的类,都可以直接使用增强型 for 循环(for-each)遍历元素。
Collection 接口是 Java 集合框架的核心抽象,它定义了所有通用集合(如 List、Set、Stack、Queue 和 Deque 等)共有的操作规范,涵盖元素的添加、获取、删除等基础行为。
不过 "根据索引/下标访问元素" 并非 Collection 接口的通用方法,这一特性实际由其子接口 List 进行定义。
Collection 接口作为更上层的抽象,主要聚焦于所有集合类型共通的核心操作,为各种具体集合类提供了统一的行为标准。
List 接口代表一组有序的对象集合。元素会按照插入顺序被存储,并且你可以按照它们在列表中的固有顺序(即插入时的先后顺序)来访问这些元素。
List 的有序性使得它能够支持通过索引(类似数组下标)精准访问、插入或删除指定位置的元素,这也是它与 Set 等无序集合的核心区别之一。
Set 接口代表一组无序的对象集合。与 List 不同,Set 接口本身并不保证元素的访问顺序,也不支持通过索引等方式按固定序访问元素。
尽管某些 Set 实现类(如 TreeSet)会依据元素的自然排序或自定义比较器对元素进行排序,但这属于具体实现的特性,而非 Set 接口本身所规定的行为。
在 Set 接口层面并不提供任何关于元素顺序的保证。这也使得 Set 更适合用于需要确保元素唯一性的场景,而非依赖顺序访问的场景。
SortedSet 接口代表一组有序的对象集合,其核心特性是元素会按照特定规则保持排序状态。因此,遍历 SortedSet 时,元素会始终按照预设的排序顺序(通常是元素的自然排序或通过比较器指定的顺序)呈现,这与普通 Set 接口不保证顺序的特性形成鲜明对比。这种内置的排序能力使得 SortedSet 特别适合需要有序访问且保证元素唯一性的场景。
NavigableSet 接口是 SortedSet 接口的扩展,它在保持元素有序性的基础上,额外提供了一组用于元素导航的便捷方法。这些方法支持更灵活的元素定位操作,例如查找小于 / 大于指定元素的最大 / 最小值、获取指定范围的子集合等,让开发者能够更精确地操控和访问集合中的元素,进一步增强了有序集合的实用性。
Queue 接口代表经典的队列数据结构,遵循 "先进先出"(FIFO)的操作原则。元素从队列的一端(通常称为队尾)插入,从另一端(通常称为队头)取出。这一特性与遵循 "后进先出"(LIFO)原则的栈结构形成鲜明对比。栈中元素的插入和取出操作集中在同一端。Queue 接口的设计完美契合了需要按顺序处理元素的场景,如任务调度、消息传递等。
Deque 接口代表双端队列(Double Ended Queue),是一种允许从两端(队头和队尾)执行插入和移除操作的数据结构。这种特性让它既可以像普通队列一样遵循 "先进先出"(FIFO)原则,也能像栈一样实现 "后进先出"(LIFO)的操作模式,因此也可理解为 "双端栈"。Deque 接口的灵活性使其在需要灵活操作两端元素的场景中极为实用,比如实现队列、栈或同时需要两端操作的缓冲结构等。
下面是映射(Map)接口层次结构图:
Map 接口代表一种键值对映射关系,其中键和值均为对象。它的核心特性是通过键来关联对应的值。在 Map 中存入键值对后,便可通过指定的键快速检索到对应的值。这种 "键唯一标识值" 的特性,使得只需提供键就能高效获取对应的值,无需遍历整个集合。这一设计让 Map 成为处理"关联数据"(如字典、配置表等)的理想选择。
SortedMap 接口是 Map 接口的扩展,其核心特性是键会按照特定排序规则保持排序状态。因此,遍历 SortedMap 中的键时,它们会始终遵循预设的排序顺序(通常是键的自然排序或通过比较器指定的顺序)。这使得 SortedMap 在需要按序访问键值对的场景中极具优势。
NavigableMap 接口是 SortedMap 接口的扩展,它在保留“键有序” 核心特性的基础上,额外提供了一组用于键和键值对(条目)导航的便捷方法。这些方法支持更精准的元素定位操作,例如查找小于 / 大于指定键的最大 / 最小键、获取指定范围的子映射、获取临近的键值对等,能让开发者更灵活高效地操控有序键值对集合,进一步强化了有序映射的实用性。
Iterator 接口代表一种能够对 Java 集合进行迭代的组件,适用于列表(List)、集合(Set)等各类集合。你可以从 Set、List 等集合对象中获取 Iterator 实例,通过它提供的 hasNext()(判断是否有下一个元素)和 next()(获取下一个元素)等方法,实现对集合元素的有序遍历,是操作集合元素的重要工具。
Collections 类是 Java 集合框架中的一个工具类,它包含了一系列静态实用方法,旨在简化集合操作并提升使用效率。这些方法覆盖了集合的排序、查找、替换、同步控制等常见需求,能帮助开发者更便捷地处理 List、Set、Map 等各类集合,无需重复实现基础功能,从而更高效地运用 Java 集合 API。
Properties 类是一种特殊的键值对存储结构,它虽类似于 Map,却专门用于处理字符串类型的键值映射。其独特之处在于,它原生支持从属性文件(通常以 .properties 为扩展名)中加载配置,也能将键值对持久化到属性文件中,非常适合存储应用程序的配置信息(如参数设置、环境变量等)。
Stack 类代表经典的堆栈数据结构,遵循 "后进先出"(LIFO)原则。元素通过 "推入"(push)操作添加到栈顶,而获取元素时则通过 "弹出"(pop)操作从栈顶移除,即最后进入的元素会最先被取出。Stack 适合需要临时存储和顺序回溯的场景,如表达式解析、递归调用管理等。