Java中HashMap和ArrayList的区别?
在Java中,Java中HashMap和ArrayList的区别?,java,collections,arraylist,hashmap,Java,Collections,Arraylist,Hashmap,在Java中,ArrayList和HashMap用作集合。但是我不明白在什么情况下应该使用ArrayList,在什么时候使用HashMap。它们之间的主要区别是什么?使用一个列表来创建一个有序的值集合。例如,您可能有一个要处理的文件列表 将映射用于从键到值的映射(通常是无序的)。例如,您可能有一个从用户ID到该用户详细信息的映射,因此您可以高效地查找仅给定ID的详细信息。(您可以通过只存储键列表和值列表来实现Map接口,但通常会有一个更高效的实现-HashMap在内部使用哈希表来获得分期付款的O
ArrayList
和HashMap
用作集合。但是我不明白在什么情况下应该使用ArrayList
,在什么时候使用HashMap
。它们之间的主要区别是什么?使用一个列表来创建一个有序的值集合。例如,您可能有一个要处理的文件列表
将映射用于从键到值的映射(通常是无序的)。例如,您可能有一个从用户ID到该用户详细信息的映射,因此您可以高效地查找仅给定ID的详细信息。(您可以通过只存储键列表和值列表来实现
Map
接口,但通常会有一个更高效的实现-HashMap
在内部使用哈希表来获得分期付款的O(1)键查找,例如。)实际上不是一个特定于Java的问题。您似乎需要一个“入门”在数据结构上。试试谷歌搜索“你应该使用什么数据结构”
试试这个链接
从链接:
以下是将最常用的数据结构与特定需求相匹配的一些技巧
// ...
List list = new ArrayList();
list.add(
如果使用
ArrayList
,则必须使用索引(int
类型)访问元素。使用HashMap
,可以通过另一种类型的索引(例如字符串
)访问元素
您翻转了播放器一次,然后将其存储。您可以使用BufferedImage
作为HashMap
的键类型访问BufferedImage
我希望您能理解我的第二个示例。您是在专门询问ArrayList和HashMap,但我认为要完全理解正在发生的事情,您必须理解集合框架。因此ArrayList实现列表接口,HashMap实现映射接口。因此,真正的问题是何时要使用List和何时使用映射。这是JavaAPI文档非常有用的地方 名单: 有序的集合(也称为 顺序)。此界面的用户 能够精确地控制系统中的位置 列出插入的每个元素 用户可以通过其 整数索引(列表中的位置), 并在列表中搜索元素 地图: 将键映射到值的对象。A 地图不能包含重复的键; 每个键最多可以映射到一个值 因此,正如其他答案所讨论的,列表接口(ArrayList)是使用索引访问的对象的有序集合,非常类似于数组(就ArrayList而言,顾名思义,它只是背景中的一个数组,但处理数组的许多细节都是为您处理的)。如果要保持事物的排序顺序(添加顺序,或者添加对象时指定的列表中的位置),可以使用ArrayList 另一方面,映射将一个对象用作另一个对象(值)的键(索引)。因此,假设您有具有唯一ID的对象,并且您知道您将在某个时候通过ID访问这些对象,映射将使您非常轻松(并且更快/更高效)。HashMap实现使用密钥对象的哈希值来定位其存储位置,因此不再保证值的顺序。但是,Java API中还有其他类可以提供此功能,例如LinkedHashMap,它使用哈希表存储密钥/值对,还维护一个列表(LinkedList)按键的添加顺序显示,因此您始终可以按键的添加顺序(如果需要)再次访问这些项。映射与列表 在映射中,您有键/值对。要访问值,您需要知道键。键和值之间存在一种关系,这种关系持续存在且不是任意的。它们以某种方式相互关联。例如:人的DNA是唯一的(键),并且
HashMap<String, Book> books = new HashMap<String, Book>();
// String is the type of the index (the key)
// and Book is the type of the elements (the values)
// Like with an arraylist: ArrayList<Book> books = ...;
// Now you have to store the elements with a string key:
books.put("Harry Potter III", new Book("JK Rownling", 456, "Harry Potter"));
// Now you can access the elements by using a String index
Book book = books.get("Harry Potter III");
HashMap<BufferedImage, BufferedImage> flipped = new HashMap<BufferedImage, BufferedImage>();
BufferedImage player = ...; // On this image the player walks to the left.
BufferedImage flippedPlayer = flip(player); // On this image the player walks to the right.
flipped.put(player, flippedPlayer);
// Now you can access the flipped instance by doing this:
flipped.get(player);