当前位置: 首页 > 科技观察

Java集合框架概览

时间:2023-03-12 18:43:42 科技观察

最近多次被问及HashMap的实现。答案不好。打算复习??一下JDK中的集合框架,尝试分析一下它的源码。一方面,这些课程非常实用。掌握它的实现可以更好的优化我们的程序;另一方面是学习JDK是如何实现如此优雅高效的类库来提高编程能力的。在介绍具体适合的类之前,本文先对Java中的集合框架做一个大概的描述,从高处俯瞰框架,了解框架的一些概念和约定,对后面分析具体类有很大的帮助.开始吧。集合框架(collectionsframework)首先要明确一个集合代表一组对象(和数组一样,但是数组的长度不能改变,而集合可以)。Java中的集合框架定义了一组用于表示和操作集合的规范,将特定操作与实现细节解耦。其实说白了,集合可以看成是一个微型数据库。操作无非是“增、删、改、查”四种操作。当我们学习使用一个具体的集合类时,需要弄清楚这四个操作的时间和空间复杂度,基本上就可以说你已经掌握了这个类。设计理念的主要思想可以用一句话来概括:提供一套“小而美”的API。API需要对程序员友好,让程序员在添加新功能时能够快速上手。为了保证核心接口足够小,顶层接口(即Collection和Map接口)不区分集合是否可变(mutability),是否可以改变(modifiability),是否可以改变大小(resizability)这些细微的差别。相反,有些操作是可选的,抛出UnsupportedOperationException可以表明集合在实现时不支持该操作。集合的实现者必须在文档中声明不支持这些操作。为了保证顶层核心接口足够小,只能包含以下几种情况的方法:基本操作,比如前面提到的“增删改查”important实现会想要覆盖它。此外,所有集合类必须能够提供友好的交互操作,包括不继承Collection类的数组对象。所以框架提供了一套方法让集合类和数组可以相互转化,Map可以看做是一个集合。集合框架的类继承体系中有两个基类Collection和Map。顶层有两个接口:Collection代表一组纯数据,Map代表一组键值对。一般来说,继承自Collection或Map的集合类会提供两个“标准”的构造函数:一个是没有参数的构造函数,它创建一个空的集合类,另一个是与基类(Collection或Map)类型相同的构造函数,它创建与给定参数具有相同元素的新集合类,因为Interfaces不能包含构造函数,所以上面两个构造函数的约定不是强制性的,但是在当前的集合框架中,所有继承自Collection或Map的子类都遵循这个约定。Collectionjava-collection-hierarchy如上图所示,Collection类主要有三个接口:Set表示不允许重复元素的集合(Acollectionthatcontainsnoduplicateelements)List表示允许重复元素的集合(Anorderedcollection(也称序列))QueueJDK1.5是新的,与上面两个集合类的主要区别在于Queue主要是用来存储数据的,而不是用来处理数据的。(Acollectiondesignedforholdingelementspriortoprocessing.)MapMapClassHierarchyMap不是真正的集合(arenottruecollections),但是这个接口提供了三个“集合视图”(collectionviews),使得像集合一样操作成为可能如下:Treatthecontentsofthemapasasetofkeys(map'scontentstobeviewedasasetofkeys)Treatthecontentsofthemapasacollectionofvalues(地图的内容被视为一组值)对待map将map的内容看成是key-valuemappings的集合(map'scontentstobeviewedasasetofkey-valuemappings)综上所述,今天开始,后续会有一系列的干货,敬请关注。需要说明的是,以后所有源码分析均基于OracleJDK1.7.0_71,敬请知悉。$java-versionjava版本“1.7.0_71”Java(TM)SE运行时环境(构建1.7.0_71-b14)JavaHotSpot(TM)64位服务器VM(构建24.71-b01,混合模式)