多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Java 中`ArrayList`和`HashMap`的区别 > 原文: [https://beginnersbook.com/2013/12/difference-between-arraylist-and-hashmap-in-java/](https://beginnersbook.com/2013/12/difference-between-arraylist-and-hashmap-in-java/) [`ArrayList`](https://beginnersbook.com/2013/12/java-arraylist/) 和 [`HashMap`](https://beginnersbook.com/2013/12/hashmap-in-java-with-example/) 是 Java 中常用的两个集合类。尽管两者都是集合框架的一部分,但它们存储和处理数据的方式却完全不同。在这篇文章中,我们将看到这两个集合之间的主要区别。 ## Java 中的`ArrayList`与`HashMap` 1)**实现**:`ArrayList`实现`List`接口,而`HashMap`是`Map`接口的实现。`List`和`Map`是两个完全不同的集合接口。 2)**内存消耗**:`ArrayList`单独存储元素的值,并在内部维护每个元素的索引。 ```java ArrayList<String> arraylist = new ArrayList<String>(); //String value is stored in array list arraylist.add("Test String"); ``` `HashMap`存储键值对。对于每个值,必须在`HashMap`中关联一个键。这清楚地表明,与`ArrayList`相比,`HashMap`中的内存消耗很高。 ```java HashMap<Integer, String> hmap= new HashMap<Integer, String>(); //String value stored along with the key value in hash map hmap.put(123, "Test String"); ``` 3) **顺序** :`ArrayList`维护插入顺序,而`HashMap`则没有。这意味着`ArrayList`以与插入列表相同的顺序返回列表项。另一方面,`HashMap`不维护任何顺序,返回的键值对不按任何顺序排序。 4)**重复**:`ArrayList`允许重复元素,但`HashMap`不允许重复键(它允许重复值)。 5) **空值** :`ArrayList`可以包含任意数量的`null`元素。`HashMap`允许一个空键和任意数量的空值。 6) **`get`方法**:在`ArrayList`中我们可以**通过指定它的索引得到**元素。在`HashMap`中,通过指定相应的键来获取元素。 #### 参考: * [`HashMap` javadoc](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html) * [`ArrayList`文档](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)