Java中的列表与地图

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

提前致谢,

nohereman

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

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

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

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

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

需要从集合中选择特定成员时使用Map。 如果没有意义,请使用List。

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

修改Random Access Vs 顺序访问 数据结构可能是一个好主意。 它们都具有不同的运行时复杂性,适用于不同类型的上下文。

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

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


资源:

  • sun.com – 集合框架简介,Map

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

比较:

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

在地图中,您只需输入即可

 Map map = new HashMap(); // Fill map MyObject getIt = map.get("peter"); 

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

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

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

MapList用于不同的目的。

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

Map保存映射键 – >值。 例如地图人员到位:“JBeg” – >“程序员”。 它是无序的。 您可以按键获取值,但不能通过索引获取值。