我没有理解Java中的地图。什么时候建议使用Map而不是List?
提前感谢,
nohereman
答案 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)
Map
和List
有不同的用途。
List
包含项目集合。有序(您可以按索引获取项目)。
Map
包含映射键 - &gt;值。例如。将人映射到位置:“JBeg” - &gt; “程序员”。它是无序的。您可以按键获取值,但不能通过索引获取。
答案 8 :(得分:0)
地图使用唯一键存储数据对象,因此可以快速访问存储的对象。您可以使用ConcurrentHashMap以便在多线程环境中实现并发。 列表可能存储重复的数据,因此您必须遍历数据元素才能访问特定元素,因此提供了对存储对象的缓慢访问。 您可以根据需要选择任何数据结构。