Java基础 - 容器和集合

来源:互联网 发布:淘宝为什么不交税 编辑:程序博客网 时间:2024/06/04 08:18

关键字: 容器  集合  集合框架  传统容器  六个核心接口  六个通用实现 一个专用实现 视图 迭代

 

   劳动者日复一日的劳作,没有任何空闲的时间。他负担不聊和其他的男人维持那种最有男人气概的关系,他的劳动在市场上被人轻视,他没有时间成为其他角色而只能沦落为一台机器。他怎能记起他所忽略的东西:一个人的成长需要时刻使用他的知识。 ……像为果实而开的花朵,自然界最美好的东西只能通过最精巧的处理才能得以保存。但是我们没有因此而善待我们自己或者其他人,大多数人过着一种完全绝望的生活。

                                              ---Henry Daivid Thoreau

 

 

参考资料:<<JavaRules>>Douglas Dunn

 

PS:

对集合框架的重要概念还想边看<<JavaRules>>边自己整理,以一种更简单易懂的方式呈现出来,不过后来发现,修改和插入任何的话到Douglas Dunn关于集合框架的某个概念的描述中都显得可笑和多余。所以在下面对于概念的阐述中都是直接摘录书中的原话。

 

容器和集合

      以前,集合和容器在计算机编程上是同义的。解决这个问题的惟一办法是用容器作为所有集合的广义引用,包括数组,集合框架和传统的容器VectorHashtable.容器有三个一般性用途,每个用途都很重要:如下所示:

存储和检索数据

简化数据操作

传递数据到其他方法或构造方法

我一般尽量限制用术语集合指代Collection接口的实例,但是这没什么用。术语集合的任何使用潜在地是摸棱两可的。因此当指的是Collection时,我通常说集或列表,或者用SetList接口名。值得注意的例外的术语是集合变量。集合变量是属于六个核心集合接口类型中的一种类型的变量。数组变量是数组类型的变量。这两个术语分别是核心集合接口类型变量和数组类型变量的简写。

                                                 -----------摘录自<<Java.Rules>>P 320

 

 

 

 

集合框架

集合框架被加入到Java1.2版的核心API中。它有三个主要部分:

l          六个核心集合接口

l          List接口的两个通用实现以及set,Map,SortedSet,SortedMap接口的通用实现各一个。第六个核心集合接口是Collection,它没有通用实现,因为它主要是为了解决SetList子接口的相互操作。

l          Collection工具类

学习集合框架的重点是怎样使用下面将要讨论的六个核心集合接口.Block是这样描述它们的重要性的:

 

核心集合接口是集合框架的心脏和灵魂。了解了这些接口的用法就了解了集合框架需要学习的大部分。

                                                                      --------------Bloch

对于通用实现你需要了解的是应该使用哪一个。

六个核心集合接口没有共同的父接口。Collection和三个子接口在同一个接口继承关系里,Map和一个子接口在另外一个的接口继承关系里。

所有集,列表和映射的共同方法:

int size()

boolean isEmpty()

void clear()

                                              -----------摘录自<<Java.Rules>>P 360

 

 

六个通用实现

PS:注意通用实现的类名,第一个单词是对所有实现对象(散列表,数组,二叉树)的指示,第二个单词是被实现的接口名.

除了List,每个接口只有一个通用实现。这说明两个List实现,ArrayListLinkedList之间有着本质的区别,从上面的表中可以看书,Collection接口没有通用实现。HashMapSortMapvalues()方法返回Collection,集合工具类的unmodifiableCollection(Collection c)synchronizedCollection(Collection c)方法也是这样的。这些是特别专门的实现。是java.uilt包里Collection类的惟一实现。

l          所有通用实现都有下列共同点:

l          所有可选操作都被实现

l          允许元素,键和值为null

l          不同步

l          fail-fast迭代器

l          实现了SerializableCloneable接口

通用实现的规则性补偿了视图的无规则性,并且引发了人们对集合框架的稳定性的关键,重要意义的认识。

                                                                             -----------摘录自<<Java.Rules>>P 362

 

迭代器

<<Java.Rules>>P 402

 

视图

<<Java.Rules>>P 385

 

容器上的算法

<<Java.Rules>>P 433

 

 

学习集合框架的一些感受:

对于Java2的集合框架,虽然对一些容器的使用上不成问题,但是对于整个集合框架的framwork却总是模模糊糊的,模模糊糊的东西总是这么容易的令人遗忘。

首先学习集合框架是通过<<Java2核心技术卷I:基础知识 第六版>>这本书,因为那时对Java2没有整体的认识,对集合框架的学习只是把它作为Java2基础架构的一部分来学习,对于一个结构设计精巧的艺术品以这种态度来认识和学习显然是不够的。所以有必要把它提升到另外一个高度来重新学习它。但一直没有好的资料和足够的时间来重新认识它。

最近在网上发现了<<Java.Rules>>,随便翻翻,觉得正是我现在需要的可以提高自己Java语言能力的一类书籍----对于Java规范以程序员角度审视的一本书。我直接翻阅了第六章(讲解集合框架)Douglas Dunn对集合框架的认识和细致简单的讲解让我感到感到一阵又一阵的兴奋。就像我当初刚开始学Java时看<<Java2核心技术>>两卷的感受一样,对集合框架的framwork也有了比较清晰的认识(可能还不仅仅是这样)。

推荐刚学Java2集合框架的朋友可以先看<<Java2核心技术卷一>>或者sun官网上面<<The Java Tutorial>>关于集合框架的一部分。然后看完后带着很多问题(如果没有问题就不用再看其他资料了)看<<Java.Rules>>讲解集合框架的第六章,肯定会让你有一种一览众山小的感觉。

本来在上面对集合框架的重要概念还想边看书边自己整理,以一种更简单易懂的方式呈现出来,不过后来发现,修改和插入任何的话到Douglas Dunn关于集合框架的某个概念的描述中都显得可笑和多余。所以在上面对于概念的阐述中都是直接摘录书中的原话。

 

 

 

 

 
原创粉丝点击