您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 轻松学Java之集合框架
第13章集合框架Java集合框架是Java语言的重要组成部分,它包含了系统而完整的集合层次体系,封装了大量的数据结构的实现。深刻理解Java集合框架的组成结构及其中的实现类和算法,能极大提高程序员编码的能力。本章讲述Java集合框架,主要包括集合框架的概念、集合框架接口,以及列表、集合、映射三种结构还有迭代方法、比较方法和较早以前版本的类和接口。下面就让我们一起来学习这些内容。13.1集合框架概述集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体。集合被用于存储、获取、操纵和传输聚合的数据。Java集合框架提供了有效的数据结构和算法,因此程序员不需要自己编写代码实现这些功能。而且结合框架对各个接口的实现是可以互换的,因此很容易转换接口。这样就提高了软件的复用性。13.1集合框架概述Java平台提供了一个全新的集合框架。集合框架的核心接口为Collection、List(列表)、Set(集合)和Map(映射),如图13.1所示。IteratorCollectionMapListIteratorListSetHashMapTreeMapArrayListLinkedListHashSetTreeSetLinkedHashSetLinkedHashMap13.1集合框架概述由于上面的框架图较为复杂,读者基本了解就可以,不需要全部记下来。将上面的关系图简化后,只需要读者记住的内容如图13.2所示。MapCollectionListSet13.1集合框架概述从图13.2中可以看到,Collection是集合继承树中最顶层的接口,几乎所有的Java集合框架成员都继承实现了Collection接口,或者与其有密切关系。Collection提供了关于集合的通用操作。Set接口和List接口都继承了Collection接口,而Map接口没有继承Collection接口。因此,Set对象和List对象都可以调用Collection接口的方法,而Map对象则不可以。13.1集合框架概述下面我们对这三种类型接口的结构加以说明:Set有点类似数学中集合的定义,是无序的、没有重复项目的集合。List是位置性集合,加进清单的元素可以加在清单中特定位置或加到末尾,可以保存重复的元素。Map用于关键字/数值对,其中关键字是数值的惟一标识(不可重复),用户可以按关键字存取数据,数据可重复。具体形式如图13.3所示:元素1元素2元素3元素4元素5……元素3元素2……元素2元素XKey2012…n值2Key1Key3值1……值2……Keyn值xSetListMap13.2Collection接口Collection接口是集合框架最基础的接口,所以这个接口定义了整个集合框架都可以调用的方法,因此必须十分熟悉。Collection接口的定义方法如图13.4所示。publicinterfaceCollectionEextendsIterableE定义Collection接口。E可以为任何类。迭代器Iterable13.2Collection接口而Collection接口常用方法如表13.1所示。方法方法作用booleanadd(Eobj)将指定对象obj新增至集合内,增加成功传回true,否则传回falsebooleanaddAll(Collectionc)将指定集合c内所有元素新增至集合内,增加成功传回true,否则传回falseviodclear()将集合内所有元素清空booleanisEmpty()检查集合内是否没有任何元素,如果是传回true,否则传回falseIteratoriterator()将集合内的元素信息转存成Iterator对象booleanremove(Objectobj)将指定元素obj从集合内移除,成功移除传回true,否则传回falseintsize()将集合内的元素总数传回Object[]toArray()将集合内的元素转存到数组后传回该数组13.2Collection接口知道了这些方法之后,我们就可以接着讨论实现他们的标准类了。标准的Collection实现类总结如表13.2所示。类名类的说明AbstractCollection实现大多数Collection接口AbstractList扩展AbstractCollection并实现大多数List接口AbstractSequentialList为了被类集使用而扩展AbstractList,该类集是连续而不是用随机方式访问其元素LinkedList通过扩展AbstractSequentialList来实现连接表ArrayList通过扩展AbstractList来实现动态数组AbstractSet扩展AbstractCollection并实现大多数AbstractSetHashSet为了使用散列表而扩展AbstractSetTreeSet实现存储在树中的一个集合,扩展扩展AbstractSet13.3列表List列表作为集合的一种,其主要特点在于其中的元素保持一定的顺序。本节将具体讲解List的两种实现类(ArrayList类和LinkedList类)的使用。13.3.1ArrayList类ArrayList类是对AbstractList类的扩展。ArrayList支持可随需要而增长的动态数组。在Java中,标准数组是定长的。它们被创建之后,就不能被加长或缩短,也就意味着开发者必须先知道数组可以容纳多少元素。一般情况下,只有在运行时才能知道需要多大的数组。为了解决这个问题,类集框架定义了ArrayList。ArrayList能够动态地增加或减小其大小。ArrayList有三种构造方法,如图13.6所示。ArrayList()方法ArrayList(Collectionc)方法ArrayList(intinitialCapacity)方法建立一个空的数组列表建立一个数组列表,该列表由类c中的元素初始化建立一个数组列表,该数组有指定的初始容量(capacity)13.3.1ArrayList类ArrayList类的主要方法与功能描述如表13.3所示。方法功能描述publicbooleanadd(Eo)将指定的元素追加到列表的最后publicvoidadd(intindex,Eelement)将参数element表示的元素插入此列表中参数index表示指定位置中publicbooleanaddAll(Collectionc)将Collection中所有元素追加到此列表的尾部publicvoidclear()删除列表中的所有元素publicbooleancontains(Objectelem)判断此列表是否包含参数elem表示的指定元素publicget(intindex)返回列表中指定位置上的元素publicbooleanisEmpty()判断此列表中有没有元素publicremove(intindex)删除列表中指定位置上的元素publicset(intindex,Eelement)用参数element表示指定的元素代替列表中指定位置上的元素。publicintsize()返回列表中的元素数publicObject[]toArray()返回一个包含列表中所有元素的数组publicT[]toArray(T[]a)返回一个包含列表中所有元素的数组voidtrimToSize()将容量调整为该列表的当前大小13.3.2LinkedList类LinkedList类是对AbstractSequentialList类的扩展。它提供了一个链接列表的数据结构。LinkedList类有两种构造方法,如图13.8所示。LinkedList()方法LinkedList(Collectionc)方法建立一个空的链接列表建立一个链接列表,该列表由类c中的元素初始化13.3.2LinkedList类除了它继承的方法之外,LinkedList类本身还定义了一些有用的方法,这些方法主要用于操作和访问列表。它们具体的作用我们用图13.9来表示。VoidaddFirst(Objectobj)VoidaddLast(Objectobj)ObjectgetFirst()ObjectgetLast()ObjectremoveFirst()ObjectremoveLast()使用addFirst方法可以在列表头增加元素使用addLast方法可以在列表尾增加元素调用getFirst方法可以获得第一个元素使用removeFirst方法可以删除第一个元素调用getLast方法可以获得最后一个元素使用removeLast方法可以删除最后一个元素13.4集合Set集合是一种不包含重复元素的Collection,即Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。本节将介绍Set中的两个主要的类HashSet类和TreeSet类。13.4.1HashSet类HashSet类是对AbstractSet类的扩展。它创建了一个类集。该类集使用散列表进行存储,而散列表则通过使用称之为散列法的机制来存储信息。在散列中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码。而散列码则被用来当作与关键字相连的数据的存储下标。HashSet类的构造方法如图13.11所示。HashSet()方法HashSet(Collectionc)方法HashSet(intinitialCapacity)方法HashSet(intinitialCapacity,floatfillRatio)方法构造一个默认的散列集合用类c中的元素初始化散列集合用capacity初始化散列集合的容量用参数初始化散列集合的容量和填充比(也称为加载容量)13.4.1HashSet类图13.11中所提到的填充比必须介于0.0与1.0之间。它决定在散列集合向上调整大小之前,有多少能被充满。具体地说,就是当元素的个数大于散列集合容量乘以它的填充比时,散列集合会被扩大。这里要注意的是,散列集合并不能确定其元素的排列顺序。如果需要排序存储,可以使用下面将会讲到的TreeSet类。HashSet类的主要方法及功能描述如表13.4所示。正如上面所说的一样,HashSet中的元素并没有按照顺序进行存储。方法功能描述publicbooleanadd(Eo)向集合添加指定元素publicvoidclear()清空集合中所有元素publicbooleancontains(Objecto)判断集合是否包含指定元素publicbooleanisEmpty()判断集合是否还有元素。如果集合不包含任何元素,则返回truepublicIteratoriterator()返回对此集合中元素进行迭代的迭代器publicbooleanremove(Objecto)删除集合中的元素publicintsize()返回此集合中的元素的个数publicObject[]toArray将集合中的元素放到数组中,并返回该数组13.4.2TreeSet类TreeSet为使用树来进行存储的Set接口提供了一个工具。对象按升序进行存储,这方便我们对其进行访问和检索。在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。TreeSet类的构造方法如图13.14所示。TreeSet()方法TreeSet(Collectionc)方法TreeSet(Comparatorcomp)方法TreeSet(SortedSetss)方法构造一个空的树集合,其元素按升序排序用类c中的元素初始化树集合按照由comp指定的比较方法进行排序构造了一个包含了ss的元素的树集合13.4.2TreeSet类在TreeSet类中有几个特殊的方法及功能描述,如表13.5所示。方法功能描述publicEfirst()返回有序集合中第一个元素,即最小的那个元素publicElast()返回有序集合中最后一个元素,即最大的那个元素public
本文标题:轻松学Java之集合框架
链接地址:https://www.777doc.com/doc-6130968 .html