列表与地图有何不同?

时间:2012-05-03 06:06:04

标签: java

在java中,List和Map在集合中使用。但我无法理解我们应该在哪些情况下使用List以及哪些时间使用Map。两者之间的主要区别是什么?

7 个答案:

答案 0 :(得分:11)

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

当您需要键/值映射以及何时只需要元素集合时,通常相当明显。如果键值的一部分,则变得不太清楚,但是您希望能够有效地通过该键获取项目。对于地图来说,这仍然是一个很好的用例,即使在某些感觉中你没有单独的密钥集合。

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

答案 1 :(得分:4)

Map适用于Key:Value种类型的数据。例如,如果您要将学生代码数字映射到其名称。

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

答案 2 :(得分:1)

地图界面 Map关注唯一标识符。您将唯一键(ID)映射到特定键 值,其中键和值当然都是对象。 Map实现允许您执行搜索等操作 基于密钥的值,要求仅收集值,或要求收集 只是钥匙。与集合一样,Maps依赖于equals()方法来确定是否 两个键相同或不同。

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

答案 3 :(得分:1)

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

关于它的好处是它需要你需要的内存量,而不是字节数。

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

如需更多阅读,请尝试维基百科的HashMaplinked list

答案 4 :(得分:1)

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

答案 5 :(得分:0)

List只是一个有序的collectiom(一个序列)。检查此list documentation。您可以按整数索引(列表中的位置)访问元素,并搜索列表中的元素。 此外,列表还允许重复元素和多个NULL元素。

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

答案 6 :(得分: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))