Java中的列表与映射

Java中的列表与映射,java,list,map,Java,List,Map,我不懂Java中的地图。何时建议使用地图而不是列表 提前感谢, nohereman映射用作键和值的关联。在列表中,基本上只有值。 列表中的索引始终为int,而在Map中,您可以使用另一个对象作为键 资源: 当您希望映射而不是列表时。这些接口的名称是有意义的,您不应该忽略它 如果希望数据结构表示键到值的映射,请使用映射。如果希望以任意有序格式存储数据,请使用列表 Java映射:将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值 Java列表:一个有序的集合(也称为序列)。此

我不懂Java中的地图。何时建议使用地图而不是列表

提前感谢,


nohereman

映射用作键和值的关联。在列表中,基本上只有值。
列表中的索引始终为int,而在Map中,您可以使用另一个对象作为键


资源:


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

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

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

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


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

Map
list
有不同的用途

列表
保存项目集合。已排序(您可以通过索引获取项目)


Map
保存映射键->值。例如,将人员映射到位置:“JBeg”->“程序员”。而且它是无序的。您可以按键获取值,但不能按索引获取值。

取决于您的性能问题。一个更明确的映射一个HashMap将保证在插入和删除时为O(1)。一个列表至少有一个O(n)来查找一个项目。因此,如果您能详细说明您的情况,我们可能会提供更多帮助。

修改Vs可能是个好主意。它们都具有不同的运行时复杂性,并且适用于不同类型的上下文

假设你有一群有名字和学生证的学生。如果你把他们放在一个列表中,找到student_id=300的学生的唯一方法是查看列表中的每个元素,一次一个,直到找到正确的学生

通过映射,可以将每个学生的ID与学生实例相关联。现在你可以说,“给我学生300”,然后马上把那个学生叫回来

当需要从集合中拾取特定成员时,请使用映射。在没有意义时使用列表


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

我认为这很大程度上是一个如何访问数据的问题。有了地图,你可以用一个已知的键“直接”访问你的项目,你必须在一个列表中搜索它,如果它已排序,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
 }
}
List List=new ArrayList();
//填写清单
//想得到对象“彼得”
对于(MyObject m:列表){
如果(“peter”.equals(m.getName()){
//找到了
}
}
在地图中,您只需键入

Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");
Map Map=newhashmap();
//填充图
MyObject getIt=map.get(“彼得”);
如果您有数据要处理,并且无论如何都需要处理所有对象,那么列表就是您想要的。如果您想要处理具有已知键的单个对象,那么映射更好。
这不是完整的答案(仅我的2…),但我希望它能对您有所帮助。

映射使用唯一的键存储数据对象,因此提供对存储对象的快速访问。您可以使用ConcurrentHashMap在多线程环境中实现并发。 然而,列表可能存储重复的数据,您必须迭代数据元素才能访问特定元素,因此对存储对象的访问速度较慢。
您可以根据自己的需求选择任何数据结构。

这就像在自己的定义中使用一个词。这不是一个非常有用的答案…不,它指出这些接口的名称有意义,您不应该忽略它。添加了您的注释和更多信息,然后删除了我的否决票。您忘记了列表可以contain duplicates是一个有序的列表吗?或者“ordered”的意思与“sorted”不同。不要吹毛求疵……java文档说ordered,我几乎把同样的东西放在了Tony上。@Tony:sorted!=ordered。对于有序集合,元素有(y)顺序(这对程序员来说是显而易见的,并且通常可以由程序员进行操作)。列表是有序的,例如,LinkedList中的每个项目都指向下一个项目。对于已排序的集合,项目的顺序由项目的比较决定,并且始终保持排序。+1表示不引用javadoc并提供示例:)这在技术上是不正确的。如果学生id映射到一个索引,例如id 300->299[index],这是一个固定的时间查找。我没有说是,但是你所做的更广泛的陈述不太正确(从理论角度)@Woot4Moo如果学生id是字符串而不是数字怎么办?@user2520215什么?映射的树状图实现不是无序的。排序!=有序的