Java中的列表与地图

时间:2010-09-22 15:04:30

标签: java list map

我没有理解Java中的地图。什么时候建议使用Map而不是List?

提前感谢,

nohereman

9 个答案:

答案 0 :(得分:37)

假设你有一群学生有姓名和学生证。如果你把它们放在一个List中,找到student_id = 300的学生的唯一方法就是一次一个地查看列表中的每个元素,直到找到合适的学生。

使用地图,您可以关联每个学生的ID和学生实例。现在你可以说,“让我的学生300”并立即让那个学生回来。

当您需要从集合中选择特定成员时,请使用地图。如果没有意义,请使用列表。

假设您有完全相同的学生实例,但您的任务是生成所有学生姓名的报告。你将它们放在一个列表中,因为没有必要挑选和选择个别学生,因此不需要地图。

答案 1 :(得分:21)

  

Java map:将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。

     

Java list:有序集合(也称为序列)。该接口的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

不同之处在于它们是不同的。 Map是键/值的映射,是项列表的列表。

答案 2 :(得分:4)

修改Random Access V Sequential Access Data Structures可能是个好主意。它们都具有不同的运行时复杂性,适用于不同类型的上下文。

答案 3 :(得分:3)

取决于您的性能问题。更明确地映射HashMap将保证插入和删除O(1)。列表最坏的是O(n)来查找项目。因此,如果您想要详细说明您的方案是什么,我们可以提供更多帮助。

答案 4 :(得分:2)

地图用作关键字和值的关联。使用列表,您基本上只有值 List中的索引始终为int,而在Map中,您可以将另一个Object作为键。


资源:

答案 5 :(得分:2)

我认为很多关于如何访问数据的问题。使用地图,您可以使用已知密钥“直接”访问您的项目,在列表中您必须搜索它,如果已排序,则为evan。

比较

List<MyObject> list = new ArrayList<MyObject>();
//Fill up the list
// Want to get object "peter"
for( MyObject m : list ) {
 if( "peter".equals( m.getName() ) {
    // found it
 }
}

在地图中,您只需输入

即可
Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");

如果您要处理数据并且需要对所有对象进行处理,那么列表就是您想要的。如果要使用众所周知的密钥处理单个对象,则地图更好。 它不是完整的答案(只是我的2 ...)但我希望它可以帮助你。

答案 6 :(得分:1)

当您想要映射而不是列表时。这些接口的名称有意义,你不应该忽略它。

当您希望数据结构表示值到键的映射时,请使用映射。如果希望数据以任意有序格式存储,请使用列表。

答案 7 :(得分:0)

MapList有不同的用途。

List包含项目集合。有序(您可以按索引获取项目)。

Map包含映射键 - &gt;值。例如。将人映射到位置:“JBeg” - &gt; “程序员”。它是无序的。您可以按键获取值,但不能通过索引获取。

答案 8 :(得分:0)

地图使用唯一键存储数据对象,因此可以快速访问存储的对象。您可以使用ConcurrentHashMap以便在多线程环境中实现并发。 列表可能存储重复的数据,因此您必须遍历数据元素才能访问特定元素,因此提供了对存储对象的缓慢访问。 您可以根据需要选择任何数据结构。