Lists,ArrayLists,Maps,Hashmaps,Collections等有什么区别..?

loc*_*ock 17 java data-structures

我一直在使用HashMaps,因为我在Java中再次开始编程而没有真正理解这些Collections的东西.

老实说,我不确定是否一直使用HashMaps最适合我或生产代码.到目前为止,只要我能够以我在PHP中调用它的方式获取我需要的数据,这对我来说无关紧要(是的,我承认你现在正在考虑的任何负面的事情)哪里$this_is_array['this_is_a_string_index']提供了如此多的方便召回一组变量.

所以现在,我已经使用java超过3个月了,并且遇到了我在上面指定的接口,并且想知道,为什么有这么多东西(更不用说,矢量,abstractList {哦,列表继续... })?

我的意思是他们彼此之间有什么不同?

更重要的是,在我的案例中使用的最佳界面是什么?

Bar*_*ers 44

API很清楚它们之间的差异和/或关系:


采集

集合层次结构中的根接口.集合表示一组对象,称为其元素.有些集合允许重复元素而其他集合则不允许.有些是订购的,有些是无序的.

http://download.oracle.com/javase/6/docs/api/java/util/Collection.html

名单

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

http://download.oracle.com/javase/6/docs/api/java/util/List.html

不包含重复元素的集合.更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)和至多一个null元素.正如其名称所暗示的,该界面模拟数学集抽象.

http://download.oracle.com/javase/6/docs/api/java/util/Set.html

地图

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

http://download.oracle.com/javase/6/docs/api/java/util/Map.html


有什么特别的东西让你对上述内容感到困惑吗?如果是,请编辑原始问题.谢谢.

  • 以上是所有接口,但ArrayList和LinkedList之类的东西是实现.这些实现完全符合接口指定的内容,但如果您要比较时间和空间复杂性,则需要查看实现的文档.如果实施,速度和空间要求对您无关紧要,您可以选择任何一个. (3认同)

MAK*_*MAK 11

常见Java集合的简短摘要:

'Map':'Map'是一个允许存储key => value对的容器.这使得使用密钥快速搜索以获得其关联值.java.util包中有两个实现,'HashMap'和'TreeMap'.前者实现为hastable,而后者实现为平衡二叉搜索树(因此也具有对键进行排序的属性).

'Set':'Set'是一个只包含唯一元素的容器.多次插入相同的值仍然会导致"Set"仅保存一个实例.它还提供快速操作来搜索,删除,添加,合并和计算两组的交集.像'Map'一样,它有两个实现,'HashSet'和'TreeSet'.

'List':'List'接口由'Vector','ArrayList'和'LinkedList'类实现."列表"基本上是保留其相对顺序的元素集合.您可以向其添加/删除元素,并访问任何给定位置的各个元素.与"地图"不同,"列表"项目由int索引,即它们的位置是"列表"(第一个元素位于第0位,最后一个位于"List.size()" - 1).'Vector'和'ArrayList'是使用数组实现的,而'LinkedList',顾名思义,使用链表.需要注意的一点是,不像php的关联数组(更像是一个Map),Java中的数组和许多其他语言实际上代表了一个连续的内存块.阵列中的元件基本上并排布置在相邻的"槽"上,可以这么说.这提供了非常快的查找和写入时间,比使用更复杂的数据结构实现的关联数组快得多.但是,与关联数组不同,除了数组中的数值位置之外,它们不能被任何其他索引编入索引.

为了更好地了解每个集合的优点及其性能特征,我建议您对数据结构(如数组,链表,二叉搜索树,哈希表以及堆栈和队列)有一个很好的了解.如果你想成为任何语言的有效程序员,那么学习这个就没有什么可以替代的.

您还可以阅读Java Collections路径以开始使用.

  • +1以与手册不同的方式解释它。老实说,当我阅读文档中的技术术语时,我只能得到很少的理解。 (2认同)

And*_*s_D 8

简而言之(仅查看接口):

List - 值列表,类似于"可调整大小的数组"

设置 - 不允许重复的容器

Map - 键/值对的集合