容器简介

来源:互联网 发布:驱动精灵不需要网络 编辑:程序博客网 时间:2024/05/29 09:05

就我而言,容器类对于新的开发者是最强大的工具之一,可以大幅提高编程能力。由于Java

1.0 和 1.1 中容器的可怜表现,在Java 2  中,所有的容器都经过重新设计5。某些容器

改变不大,但多数容器完全改变了。提供了类似链表(linked list),队列(queue)和双

向队列(deque,发音同“decks”)的行为,丰富了容器类库的功能。

 

设计容器类库是很困难的事(多数类库的设计也都如此)。在 C++中,容器类是用许多不同

的类组成了基础,这好过 C++早期根本没有容器类,但是 Java 并不是这样的。我还见过

的另一种极端情况是,整个容器类类库只有一个类,“container”,其行为既像是线性序

列( linear sequence),又像是关联数组(associativearray)。Java 2   的容器类类

库强调平衡:成熟的容器类类库应具备你所期望得到的完整功能,但比 C++的容器和其他

类似的容器更易于学习与使用。于是其结果看起来就有点奇怪。这与早期 Java 类库的某些

决策不同,这种奇怪并不是偶然的,而是权衡复杂性,经过深思熟虑做出的决策。要花点

时间才能掌握类库的某些方面,不过我认为你很快就能掌握这些新工具。

 

Java 2 容器类类库的用途是“持有你的对象”,并将其划分为两个不同的概念:

 

1. Collection:                                                                                 一组独立的元素,通常有某种规则应用于其上。

List                                                                         必须保持元素特定的顺序,而 Set 不能有重复元素。(Java 的容器没有实现 bag,因为 List

提供了足够的功能)
2.Map: 一组成对的键值对(key-value)对象。初看起来这似乎应该是一个
Collection,其元素是成对的对象,但是这样的设计实现起来太笨拙了,于是
我们将 Map 明确提取出来形成一个独立的概念。另一方面,如果使用
Collection 表示 Map 的部分内容,会便于查看此部分内容。因此 Map 可以返
回所有键组成的 Set,所有值组成的 Collection,或其键值对组成的 Set;并
且象数组一样容易扩展成多维 Map,无需增加新的概念,只要让 Map 中键值
对的每个“值”也是一个 Map 即可(此 Map 中的“值”还可以是 Map,依
此类推)。


接下来我们先学习容器的一般特性,然后深入细节,最后学习为什么某些容器具有不同的
版本,以及如何在它们之间进行选择。


原创粉丝点击