5

在 java 中,List 和 Map 在集合中使用。但是我不明白在什么情况下我们应该使用 List,什么时候使用 Map。两者的主要区别是什么?

4

7 回答 7

12

现在是阅读Java 集合教程的好时机——但从根本上说,列表是可以通过索引访问的有序元素序列,而映射通常是从键到值的无序映射。(一些地图保留插入顺序,但这是特定于实现的。)

当你想要一个键/值映射并且你只想要一个元素的集合时,这通常是相当明显的。键是否是值的一部分变得不太清楚,但是您希望能够通过该键有效地获取项目。即使从某种意义上说,您没有单独的键集合,这仍然是地图的一个很好的用

还有Set,它是不同元素的(通常是无序的)集合。

于 2012-05-03T06:08:10.810 回答
5

地图适用于Key:Value一对数据。例如,如果您想将学生卷号映射到他们的姓名。

List用于允许重复的元素的简单有序集合。例如表示学生姓名列表。

于 2012-05-03T06:09:09.417 回答
1

地图接口 地图关心唯一标识符。您将唯一键(ID)映射到特定值,其中键和值当然都是对象。Map 实现允许您执行诸如基于键搜索值、仅请求值的集合或仅请求键的集合之类的操作。与 Set 一样,Map 依赖 equals() 方法来确定两个键是相同还是不同。

List 接口 List 关心索引。List 具有非列表所没有的一件事是一组与索引相关的方法。这些关键方法包括 get(int index)、indexOf(Object o)、add(int index, Object obj) 等。所有三个 List 实现都按索引位置排序——您可以通过在特定索引处设置对象或在不指定位置的情况下添加对象来确定位置,在这种情况下,对象被添加到末尾。

于 2012-05-03T06:12:48.600 回答
1

list 是一个链表,其中每个对象都通过指针连接到下一个对象。将新对象插入列表所需的时间是 O(1),但对其进行的其余操作需要更长的时间。

它的好处是它完全占用了您需要的内存量,甚至不超过字节。

地图是一种具有数组的数据结构,数组中的每个条目都使用hashFunction(key)根据键计算位置的 a 进行计算。几乎 Map 中的每个操作都需要 O(1)(当有 2 个相同的键时插入除外),但空间复杂度相当大。

更多阅读请尝试维基百科的HashMap链表

于 2012-05-03T06:12:56.170 回答
1

HashList是将对象存储在哈希表和列表中的数据结构。它是哈希图和双向链表的组合。访问会更快。HashMap 是 map 接口的哈希表实现,它与 HashTable 相同,只是它是不同步的并且允许空值。List 是一个有序集合,它允许其中包含空值和重复项。位置访问是可能的。Set 是一个不允许重复的集合,它最多允许一个空元素。和我们的数学集一样。

于 2012-05-03T06:27:44.790 回答
0

List只是一个有序的集合(一个序列)。查看此列表文档。您可以通过整数索引(列表中的位置)访问元素,并在列表中搜索元素。列表还允许重复元素和多个 NULL 元素。

Map是将值映射到键的对象。检查此地图文档。地图不能包含重复的键;每个键最多可以映射到一个值。

于 2012-05-03T06:09:53.313 回答
0
List - This datastructure is used to contain list of elements. 
       In case you need list of elements and the list may contain duplicate values, 
       then you have to use List.

Map - It contains data as key value pair. When you have to store data 
      in key value pair,so that latter you can retrieve data using the key,
      you have to use Map data structure.

列表实现——ArrayList、LinkedList
映射实现——HashMap、TreeMap

相比之下- 如果您想获取页面的所有节点,哈希映射是最快的数据结构HashMapArrayList节点列表可以在恒定时间 (O(1)) 中获取,而使用列表的时间是 O(n)(n=页数,在排序列表上更快,但永远不会接近 O(1))

于 2012-05-03T18:41:53.230 回答