【发布时间】:2012-03-06 13:50:17
【问题描述】:
Java 中的地图不继承自接口“集合”,尽管在大多数在线“教程”中,地图与集合、列表和队列在同一类别中进行了解释。
这些地图仍然属于集合框架吗?
【问题讨论】:
标签: java collections frameworks map
Java 中的地图不继承自接口“集合”,尽管在大多数在线“教程”中,地图与集合、列表和队列在同一类别中进行了解释。
这些地图仍然属于集合框架吗?
【问题讨论】:
标签: java collections frameworks map
集合的最佳描述在Java Collection Tutorial的开头。
集合(有时称为容器)只是将多个元素组合成一个单元的对象。集合用于存储、检索、操作和通信聚合数据。通常,它们代表形成自然组的数据项,例如扑克牌(卡片集合)、邮件文件夹(字母集合)或电话簿(姓名到电话号码的映射)。
此外,本教程列出了核心集合接口,它们都遵循上述范例:
以下列表描述了核心集合接口:
Collection — 集合层次结构的根。集合表示一组称为元素的对象。 Collection 接口是所有集合实现的最小公分母,用于传递集合并在需要最大通用性时对其进行操作。某些类型的集合允许重复元素,而另一些则不允许。有些是有序的,有些是无序的。 Java 平台不提供此接口的任何直接实现,但提供了更具体的子接口的实现,例如 Set 和 List。另请参阅集合接口部分。
Set——不能包含重复元素的集合。该接口对数学集合抽象进行建模,并用于表示集合,例如构成扑克手的卡片、构成学生日程安排的课程或在机器上运行的进程。另请参阅设置接口部分。
List — 有序集合(有时称为序列)。列表可以包含重复的元素。 List 的用户通常可以精确控制每个元素在列表中的插入位置,并且可以通过它们的整数索引(位置)访问元素。如果您使用过 Vector,那么您就会熟悉 List 的一般风格。另请参阅列表界面部分。
队列 — 用于在处理之前保存多个元素的集合。除了基本的 Collection 操作之外,Queue 还提供了额外的插入、提取和检查操作。
队列通常(但不一定)以 FIFO(先进先出)方式对元素进行排序。例外情况是优先级队列,它根据提供的比较器或元素的自然顺序对元素进行排序。无论使用何种排序,队列的头部都是将通过调用 remove 或 poll 删除的元素。在 FIFO 队列中,所有新元素都插入到队列的尾部。其他类型的队列可能使用不同的放置规则。每个 Queue 实现都必须指定其排序属性。另请参阅队列接口部分。
Map — 将键映射到值的对象。 Map 不能包含重复的键;每个键最多可以映射到一个值。如果您使用过 Hashtable,那么您已经熟悉 Map 的基础知识。另请参阅地图界面部分。
所以 Map 是一个 Collection,尽管它实际上并不需要实现 Collection 接口。
【讨论】:
Map 接口不是 Collection 接口的扩展。相反,接口从它自己的接口层次结构开始,用于维护键值关联。
【讨论】:
查看official tutorial,尤其是Lesson: Interfaces:
[...]核心集合接口是 Java 集合框架的基础。如下图所示,核心集合接口形成层次结构。
还有:
以下列表描述了核心集合接口:
Collection[...]
Set[...]
List[...]
Queue[...]
Map[...]
【讨论】:
从概念上讲,地图绝对是集合,自 Smalltalk 以来一直如此。 Java 的类型层次结构不是为了管理概念关系,而是一种实用关系,特别是说明必须实现哪些方法。
对于类似地图的集合,这些与非类似地图的集合非常不同。例如,对于地图,您必须有 put(key, value) 和 get(key) (或类似的,如果您正在使用关联对象),而非类似地图的必须有 iterator() 和 add() .
【讨论】:
原因是 Collections 与一组值一起工作,而 Map 以键值对的形式工作。
【讨论】: