一、集合论:

    集合论源自现代数学,属于现代数据的基础理论。其奠基人康托尔在创建集合理论给出了许多公理和性质。它的概念和方法渗透到代数、拓扑和分析等许多数学分支以及物理学质点力学等一些自然科学,为这些科学提供了奠基的方法,改变了这些科学的面貌。计算机学科学作为一门现代科学因为和数学的渊源,很多概念也来自于自然数学,集合就是其中之一。

1.1 集合:

    集合很难下一个精确的定义,通常情况下,把具有相同性质的一类东西,汇聚成一个整体,可以称为集合。换句说,就是一组具备相同特殊性的东西集合在一起,称之为集合。用生活中的一些列子来说,全体中国人可以称之为集合,诸如此类,生活中很多东西就是可以称之为集合了。
    通常情况下,数学上用于表示集合的方式有两种:列举法和性质描述法。所谓列举法是,就是把集合中所有的个体描述列举出来,比如集合A={1,2,3}。而性质描述法,就是通过一种规则或者是数学符号描述元素集,比如集合B={X|0<X<100且X属于整数}。
    数学上的集合是从定义以后,就是固定不变的。对于计算机科学来说,集合是动态变化的,可以随着时间的、特定需求改变而产生变化。比如增大、缩小或者其他变化。计算机的集合表示方法,不同程序语言不同的方式,但是基本上都是通过特定的数据结构以及算法来描述,如列表、堆栈、队列、哈希表等等。

1.2 集合框架:

    集合框架,这是计算机在基于集合概念的基础上,规定了一种统计的标准的体系结构,用来表示和操作集合。基本上现代程序语言都或多或少提供了一些集合框架实现。现代程序设计语言中,最著名比如C++语言的STL库,JAVA的Collection Framework。这些框架基本上都包含了三个主要内容:对外的接口、内部具体实现和对集合进行操作的算法。
接口:即表示集合的抽象数据类型。比如Java框架中的Queue, List等接口;并且提供了这些抽象数据类型的外部操作方法描述,通过这些方法可以对抽象数据类型进行的各种操作。
实现:表示框架中接口的具体实现,实际上他们就是一些可复用的数据结构。
算法:在一个具体的集合框架中实例化对象的一些计算和操作方法,如排序、查找等等。有的算法封装在具体实现内部,有的独立于外部。这不同的程序设计语言采取的方式不同。

1.3 集合框架的好处:

    程序设计语言提供这些框架有什么好处呢?比如Java程序设计语言提供的JCF(Java Collection Framework)。他的好处是什么呢?

  • 首先:降低编程工作量。集合框架内部包含了一些可以复用的抽象数据结构实现,随着SDK一起发布,这些代码都经过了严格测试。在日常编程过中可以,放心的使用,无需重复造轮子,减少了业务编程中的开发工作量,和减少了出差的概率;
  • 其次:提高程序性能。框架代码一般初始行业顶尖专家之手,他们相对于普通程序员来说,对计算机底层基础预计语言的底层东西更加熟悉,故此很大概率上,能写出更加优胜性能的代码,此外,本身这些代码也经过严格性能测试。
  • 再次:通过标准的API,统一标准;降低程序员学习成本,从而降低学习维护业务代码的成本;
  • 最后:这些代码都是独立于具体业务场景下的代码模块。具体业务场景下使用,都是直接使用API,而不是浸入到框架内部,正所谓的面向接口编程。从而提高了代码的可重用性和互操作性。

二、Java集合框架概念&设计目标:

2.1 JCF框架概念:

    对于Java语言来说,一个Collection(集合)是一个对象,其代表一群对象。比如经典的Vector就是Collection的一种。而集合框架,即JCF(Java Collection Framework)是一个代表和操作集合的统一架构,允许集合对象的操作独立于具体的实现。这一框架具有很多优点,比如提高软件的复用性,提高性能,降低代码量,减少学习API的时间等等。
    整个框架包含了代表不同类型集合的接口;不同应用目的的接口实现类,如为了方便扩展集合框架而实现的抽象类,为了向前兼容而实现的Vector和HashTable类,为了并发场景下的实现类等等;和一些集合上执行操作的算法封装,如给一个列表排序等。

2.2 JCF设计目标:

    JCF作为一个集合框架,其首要目的是提供一个精简的API集。特别代表各种集合的接口,我们通过语言对”接口”这一名词的语义定义可知,JCF是更加偏重概念性的理念。通过接口定义了框架支持的功能,把功能和具体实现分开。从而新的功能扩展与现有的Java程序看起来并无不同;而且是扩展现有设施,而非取而代之。为了使得核心接口数量尽量少,它们并不捕捉一些细微的差别,而是把这些明确的要求变为可选项,允许具体的实现类自行决定是否支持某项特性。(通过异常: UnsupportedOperationException抛出来表示不支持)。最后至关重要的一点,所有合理的集合代表都可以顺畅的进行交互操作。

三、Java集合框架发展历程:

    Java自1995年出现以来到今天已经走过20多个年头,从当初的JAVA1.0版本发展到了如今的JAVA1.13。但是其实集合框架并不是一开始就有的,至少在JAVA1.0的时候并没有完整的集合框架。彼时只有一些简单的可以自扩展的容器类,比如:Vector,HashTable等。不仅简单,而且还存在不多不少的缺陷。比如没有对容器进行排序的工具,要想得到排序,需要自行实现。直到JAVA1.2(Java1.2以后版本统称Java2),重新设计容器类库,此时才可以说是一种真正意义上的集合框架实现。Java2中设计的集合框架提供了一套设计优良的接口和类,使得操作成批的数据或者对象极为方便。设计了一系列我们熟知的抽象数据类型,如Map,Set等。并且利用了面向对象方式进行了封装,极大降低了编程负担。此外还可以利用面向对象的技术,在此基础上进行扩展,从而满足个性化需求。
总的来说Java2的集合框架,主要有两类:Collection和Map。其中Collection演化出List和Set。以下两个图是目前集合框架中相关主要接口的UML图。

参考资料

  1. 百度百科
  2. Oracle Colleciton Framework Overview