Java ArrayList和HashMap的区别
ArrayList 是集合框架的一部分,存在于java.util包中。它为我们提供了Java中的动态数组。虽然它可能比标准数组慢,但在需要对数组进行大量操作的程序中是很有帮助的。 HashMap 是Java 1.2以来集合的一部分。它提供了Java的Map接口的基本实现。它以(Key, Value)对的形式存储数据,为了访问一个值,人们必须知道它的键。HashMap之所以被称为HashMap,是因为它使用了一种叫做Hashing的技术。
散列是一种将大的字符串转换为代表同一字符串的小字符串的技术。一个较短的值有助于索引和快速搜索。HashSet也在内部使用HashMap。它在内部使用一个链接列表来存储键值对,在HashSet中已经有详细的解释和进一步的文章。
在这里,我们将继续讨论它们之间共享的共同特征。然后,我们将通过在一个Java程序中对它们进行一系列的操作,来讨论它们之间的差异,并感知输出的差异。
首先,让我们讨论 Java中ArrayList和HashMap的相似之处
- ArrayList和HashMap,都是不同步的。所以为了在多线程环境中使用它们,首先需要同步化。
- ArrayList和HashMap都允许空值。ArrayList允许空值,HashMap允许空键和值。
- ArrayList和HashMap都允许重复,ArrayList允许重复的元素,而HashMap允许重复的值
- ArrayList和HashMap都可以通过Java中的Iterator进行遍历。
- 这两个地方都使用数组,ArrayList是由数组支持的,而HashMap内部也是由数组实现的。
- 两者都使用 _ get()方法_ ,ArrayList.get()方法基于索引工作,而HashMap.get()方法需要一个对象类型的参数key_element,指的是要获取其相关值的键,所以两者都提供了恒定的时间性能。
到目前为止,我们从上面提供的媒体中得到了一些明确的信息,现在我们将对它们进行一系列的操作,以便通过总结同一操作的输出差异来感知真正的差异,这增加了我们理解ArrayList和HashMap之间差异的智力。
- 语法旁边的层次结构
- 插入顺序的维护
- 内存消耗
- 重复元素的处理
- 获取元素的便利性
- 空元素的存储
Java中ArrayList和HashMap的区别
1. 语法上的层次性
实现的接口: ArrayList实现了List接口,而HashMap是Map接口的实现。
语法: ArrayList类的声明
语法: HashMap类的声明
2.插入顺序的维护
ArrayList维护插入顺序,而HashMap不维护插入顺序,这意味着ArrayList以相同的顺序返回列表项,而HashMap不维护任何顺序,因此返回的键值对任何种类的顺序。
例子
输出
3.内存消耗
ArrayList只将元素存储为值,并在内部维护每个元素的索引。而HashMap用键和值对来存储元素,也就是两个对象。所以相对来说,HashMap需要更多的内存。
语法: ArrayList
语法: HashMap
4.重复元素的处理
ArrayList允许重复的元素,而HashMap不允许重复的键,但允许重复的值。
例子
输出
5.取出一个元素的方便性
在ArrayList中,一个元素可以通过指定它的索引来轻松获取。但是在HashMap中,元素是通过其相应的键来获取的。这意味着必须始终记住键。
注意: ArrayList get(index)方法总是给出O(1)的时间复杂度,而HashMap get(key)在最好的情况下是O(1),在最坏的情况下是O(n)的时间复杂度。
例子
输出
6.空元素的存储
在ArrayList中,任何数量的空元素都可以被存储。而在HashMap中,只允许一个空键,但值可以是任何数量。
例子
输出
所以,让我们弄清楚 ArrayList和HashMap 在表格中的 区别 。
ArrayList | HashMap |
---|---|
java ArrayList实现了List接口 | java HashMap实现了Map接口 |
ArrayList总是保持元素的插入顺序 | HashMap不保持插入的顺序。 |
ArrayList只存储值或元素 | HashMap存储键和值对 |
ArrayList可以包含重复的元素 | HashMap不包含重复的键,但包含重复的值。 |
我们可以在ArrayList中拥有任意数量的空元素 | 在HashMap中我们只能有一个空键和任意数量的空值 |
ArrayList get()方法总是给出一个O(1)的性能 | HashMap get()方法在最好的情况下可以是O(1),在最坏的情况下是O(n) |