列表,数组列表,映射,哈希映射,集合等之间有什么区别?

2022-09-02 11:10:27

自从我再次开始用Java编程以来,我一直在使用HashMaps,而没有真正理解这些集合的东西。

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

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

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

更重要的是,在我的情况下使用的最佳界面是什么?


答案 1

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.等于(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


你对上述内容有什么特别的困惑吗?如果是这样,请编辑您的原始问题。谢谢。


答案 2

常见 java 集合的简短摘要:

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

“设置”:“设置”是仅包含唯一元素的容器。多次插入相同的值仍将导致“Set”仅包含它的一个实例。它还提供快速操作来搜索,删除,添加,合并和计算两个集合的交集。像“Map”一样,它有两个实现,“HashSet”和“TreeSet”。

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

为了真正了解每个集合的优点及其性能特征,我建议您了解数组,链接列表,二叉搜索树,哈希表以及堆栈和队列等数据结构。如果你想成为任何语言的有效程序员,学习这一点真的无可替代。

您还可以阅读 Java 集合跟踪来帮助您入门。


推荐