Java 中 ArrayList 与 HashMap 的区别

2025年3月26日 | 阅读 2 分钟

在 Java 中,ArrayListHashMapJava 集合框架 中两个常用的类。尽管它们都属于集合框架的一部分,但它们存储和处理数据的方式是不同的。在本节中,我们将了解ArrayList 和 HashMap 之间的区别

ArrayList 和 HashMap 之间的区别在于,ArrayList 是一个基于索引的、由数组支持的数据结构,而 HashMap 是一个映射数据结构,它依赖哈希来实现存储值的检索。尽管两者都用于存储对象,但在实现、功能和用法上有所不同。

ArrayList 与 HashMap 对比

这将帮助您决定哪种集合类适用于特定用途

ArrayListHashMap
ArrayList 实现 List 接口。HashMap 实现 Map 接口。
ArrayList 实现 List 接口。HashMap 实现 Map 接口。
ArrayList 存储元素的值并维护每个元素的索引。HashMap 存储键 (key) 和值 (value) 对。对于 HashMap 中的每个值,都必须有一个关联的键。
ArrayList 只能存储单个对象。HashMap 以键值对的形式存储元素。
在 ArrayList 中,我们通过指定元素的索引来获取元素。在 HashMap 中,元素是通过相应的键来获取的。
ArrayList 维护插入对象的顺序。HashMap 不保证插入对象的顺序。
ArrayList 允许重复元素。HashMap 允许重复值,但不允许重复键。
ArrayList 的最佳情况或最坏情况时间复杂度始终为 O(1)HashMap 的 get() 方法在最佳情况下具有 O(1) 的时间复杂度,在最坏情况下具有 O(n) 的时间复杂度。
ArrayList 可以包含任意数量的 null 元素。HashMap 仅允许一个 null 键,但可以包含大量 null 值。
ArrayList 是一个由数组支持的基于索引的数据结构。而 HashMap 是一个映射数据结构,它依赖哈希来获取存储的值。

以上就是ArrayListHashMap 之间的区别。它们都不同,并且适用于不同的目的。如果您想在 Java 中存储对象,并且需要将键映射到值,则使用 HashMap;如果不需要映射,则使用 ArrayList。

ArrayList 和 HashMap 的相似之处

  1. 两者都不是同步的;在没有外部同步的情况下,我们不能在多线程环境中使用它们。
  2. ArrayList 和 HashMap 的 Iterator 都是快速失败的。当在 ArrayListHashMap 中创建迭代器时,它会抛出 ConcurrentModificationException 并检测结构性更改。
  3. ArrayList 和 HashMap 都允许 null。HashMap 允许 null 键和值。
  4. 两者都使用 get() 方法。ArrayList.get() 方法基于索引工作,而 HashMap.get() 方法接受一个对象类型的参数 key_element,并引用与要获取的值关联的键。因此,它们都提供恒定时间性能。
  5. ArrayList 由数组支持。类似地,HashMap 也是通过数组在内部实现的。
  6. 我们使用 Iterator 来访问 ArrayList 和 HashMap 的元素。