收藏 分销(赏)

轻松学Java之集合框架.pptx

上传人:w****g 文档编号:8657651 上传时间:2025-02-24 格式:PPTX 页数:41 大小:898.83KB
下载 相关 举报
轻松学Java之集合框架.pptx_第1页
第1页 / 共41页
轻松学Java之集合框架.pptx_第2页
第2页 / 共41页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,2020/2/7,#,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,13,章 集合框架,Java,集合框架是,Java,语言的重要组成部分,它包含了系统而完整的集合层次体系,封装了大量的数据结构的实现。深刻理解,Java,集合框架的组成结构及其中的实现类和算法,能极大提高程序员编码的能力。本章讲述,Java,集合框架,主要包括集合框架的概念、集合框架接口,以及列表、集合、映射三种结构还有迭代方法、比较方法和较早以前版本的类和接口。下面就让我们一起来学习这些内容。,13.1,集合框架概述,集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体。集合被用于存储、获取、操纵和传输聚合的数据。,Java,集合框架提供了有效的数据结构和算法,因此程序员不需要自己编写代码实现这些功能。而且结合框架对各个接口的实现是可以互换的,因此很容易转换接口。这样就提高了软件的复用性。,13.1,集合框架概述,Java,平台提供了一个全新的集合框架。集合框架的核心接口为,Collection,、,List,(列表)、,Set,(集合)和,Map,(映射),如图,13.1,所示,。,13.1,集合框架概述,由于上面的框架图较为复杂,读者基本了解就可以,不需要全部记下来。将上面的关系图简化后,只需要读者记住的内容如图,13.2,所示。,13.1,集合框架概述,从图,13.2,中可以看到,,Collection,是集合继承树中最顶层的接口,几乎所有的,Java,集合框架成员都继承实现了,Collection,接口,或者与其有密切关系。,Collection,提供了关于集合的通用操作。,Set,接口和,List,接口都继承了,Collection,接口,而,Map,接口没有继承,Collection,接口。因此,,Set,对象和,List,对象都可以调用,Collection,接口的方法,而,Map,对象则不可以,。,13.1,集合框架概述,下面我们对这三种类型接口的结构加以说明:,Set,有点类似数学中集合的定义,是无序的、没有重复项目的集合。,List,是位置性集合,加进清单的元素可以加在清单中特定位置或加到末尾,可以保存重复的元素。,Map,用于关键字,/,数值对,其中关键字是数值的惟一标识(不可重复),用户可以按关键字存取数据,数据可重复。具体形式如图,13.3,所示,:,13.2 Collection,接口,Collection,接口是集合框架最基础的接口,所以这个接口定义了整个集合框架都可以调用的方法,因此必须十分熟悉。,Collection,接口的定义方法如图,13.4,所示。,13.2 Collection,接口,而,Collection,接口常用方法如表,13.1,所示。,方法,方法作用,boolean add(E obj),将指定对象,obj,新增至集合内,增加成功传回,true,,否则传回,false,boolean addAll(Collection c),将指定集合,c,内所有元素新增至集合内,增加成功传回,true,,否则传回,false,viod clear(),将集合内所有元素清空,boolean isEmpty(),检查集合内是否没有任何元素,如果是传回,true,,否则传回,false,Iterator iterator(),将集合内的元素信息转存成,Iterator,对象,boolean remove(Object obj),将指定元素,obj,从集合内移除,成功移除传回,true,,否则传回,false,int size(),将集合内的元素总数传回,Object toArray(),将集合内的元素转存到数组后传回该数组,13.2 Collection,接口,知道了这些方法之后,我们就可以接着讨论实现他们的标准类了。标准的,Collection,实现类总结如表,13.2,所示。,类名,类的说明,AbstractCollection,实现大多数,Collection,接口,AbstractList,扩展,AbstractCollection,并实现大多数,List,接口,AbstractSequentialList,为了被类集使用而扩展,AbstractList,,该类集是连续而不是用随机方式访问其元素,LinkedList,通过扩展,AbstractSequentialList,来实现连接表,ArrayList,通过扩展,AbstractList,来实现动态数组,AbstractSet,扩展,AbstractCollection,并实现大多数,AbstractSet,HashSet,为了使用散列表而扩展,AbstractSet,TreeSet,实现存储在树中的一个集合,扩展扩展,AbstractSet,13.3,列表,List,列表作为集合的一种,其主要特点在于其中的元素保持一定的顺序。本节将具体讲解,List,的两种实现类(,ArrayList,类和,LinkedList,类)的使用。,13,.,3.1 ArrayList,类,ArrayList,类是对,AbstractList,类的扩展。,ArrayList,支持可随需要而增长的动态数组。在,Java,中,标准数组是定长的。它们被创建之后,就不能被加长或缩短,也就意味着开发者必须先知道数组可以容纳多少元素。一般情况下,只有在运行时才能知道需要多大的数组。为了解决这个问题,类集框架定义了,ArrayList,。,ArrayList,能够动态地增加或减小其大小。,ArrayList,有三种构造方法,如图,13.6,所示。,13,.,3.1 ArrayList,类,ArrayList,类的主要方法与功能描述如表,13.3,所示。,方法,功能描述,public boolean add(E o),将指定的元素追加到列表的最后,public void add(int index,E element),将参数,element,表示的元素插入此列表中参数,index,表示指定位置中,public boolean addAll(Collection c),将,Collection,中所有元素追加到此列表的尾部,public void clear(),删除列表中的所有元素,public boolean contains(Object elem),判断此列表是否包含参数,elem,表示的指定元素,public get(int index),返回列表中指定位置上的元素,public boolean isEmpty(),判断此列表中有没有元素,public remove(int index),删除列表中指定位置上的元素,public set(int index,E element),用参数,element,表示指定的元素代替列表中指定位置上的元素。,public int size(),返回列表中的元素数,public Object toArray(),返回一个包含列表中所有元素的数组,public T toArray(T a),返回一个包含列表中所有元素的数组,void trimToSize(),将容量调整为该列表的当前大小,13,.,3.2 LinkedList,类,LinkedList,类是对,AbstractSequentialList,类的扩展。它提供了一个链接列表的数据结构。,LinkedList,类有两种构造方法,如图,13.8,所示。,13,.,3.2 LinkedList,类,除了它继承的方法之外,,LinkedList,类本身还定义了一些有用的方法,这些方法主要用于操作和访问列表。它们具体的作用我们用图,13.9,来表示。,13.4,集合,Set,集合是一种不包含重复元素的,Collection,,即,Set,的构造函数有一个约束条件,传入的,Collection,参数不能包含重复的元素。本节将介绍,Set,中的两个主要的类,HashSet,类和,TreeSet,类。,13,.,4,.,1,HashSet,类,HashSet,类是对,AbstractSet,类的扩展。它创建了一个类集。该类集使用散列表进行存储,而散列表则通过使用称之为散列法的机制来存储信息。在散列中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码。而散列码则被用来当作与关键字相连的数据的存储下标。,HashSet,类的构造方法如图,13.11,所示。,13,.,4,.,1,HashSet,类,图,13.11,中所提到的填充比必须介于,0.0,与,1.0,之间。它决定在散列集合向上调整大小之前,有多少能被充满。具体地说,就是当元素的个数大于散列集合容量乘以它的填充比时,散列集合会被扩大。这里要注意的是,散列集合并不能确定其元素的排列顺序。如果需要排序存储,可以使用下面将会讲到的,TreeSet,类。,HashSet,类的主要方法及功能描述如表,13.4,所示,。,正如上面所说的一样,,HashSet,中的元素并没有按照顺序进行存储。,方法,功能描述,public boolean add(E o),向集合添加指定元素,public void clear(),清空集合中所有元素,public boolean contains(Object o),判断集合是否包含指定元素,public boolean isEmpty(),判断集合是否还有元素。如果集合不包含任何元素,则返回,true,public Iterator iterator(),返回对此集合中元素进行迭代的迭代器,public boolean remove(Object o),删除集合中的元素,public int size(),返回此集合中的元素的个数,public Object toArray,将集合中的元素放到数组中,并返回该数组,13,.,4.2,TreeSet,类,TreeSet,为使用树来进行存储的,Set,接口提供了一个工具。对象按升序进行存储,这方便我们对其进行访问和检索。在存储了大量的需要进行快速检索的排序信息的情况下,,TreeSet,是一个很好的选择。,TreeSet,类的构造方法如图,13.14,所示。,13,.,4.2,TreeSet,类,在,TreeSet,类中有几个特殊的方法及功能描述,如表,13.5,所示。,方法,功能描述,public E first(),返回有序集合中第一个元素,即最小的那个元素,public E last(),返回有序集合中最后一个元素,即最大的那个元素,public SortedSet subSet(E fromElement,E toElement),返回有序集合从,fromElement,(包括)到,toElement,(不包括)的元素,13,.,5,通过迭代方法访问类集,通常我们会遇到要显示类集中每一个元素的情况,这时我们也许会想到用循环方法来完成。到目前为止,处理这个问题最简单的方法是使用,iterator(),。,iterator(),是一个或者实现,Iterator,,或者实现,ListIterator,接口的对象。,Iterator,可以完成通过循环输出类集内容,从而获得或删除元素。,ListIterator,是对,Iterator,的扩展,允许双向遍历列表,并且可以修改单元。,Iterator,接口说明方法我们可以总结在表,13.6,中。,方法,方法说明,void add(Object obj),将,Obj,插入列表中的一个元素前,该元素在下一次调用,next(),方法时被返回,boolean hasNext(),如果存在下一个元素,则返回,true,,否则返回,false,boolean hasPrevious(),如果存在前一个元素,则返回,true,,否则返回,false,Object next(),返回下一个元素,如不存在,引发一个,NoSuchElementException,异常,int nextIndex(),返回下一个元素的下表,如果不存在下一个元素,则返回列表的大小,Object previous(),返回前一个元素,如不存在,引发一个,NoSuchElementException,异常,void remove(),从列表中删除当前元素,void set(Object obj),将,obj,赋给当前元素。即上一次调用,next(),方法或,previousfangfa,后返回的元素,13,.,5,通过迭代方法访问类集,现在我们来介绍使用迭代的方法。,在通过迭代方法访问类集之前,必须得到一个迭代方法。通常,使用迭代方法循环输出类集内容的操作步骤如图,13.15,所示,。,对于执行,List,的类集,也可以通过调用,ListIterator,来获得迭代方法。而且列表迭代方法提供了前向和后向访问类集的能力,并且可以修改元素。,13,.,6,映射,Java,还在,java.util,中增加了映射。映射(,map,)是一个存储关键字和值的关联,或者说是“关键字,/,值”对的对象,即给定一个关键字,可以得到它的值。关键字和值都是对象,关键字必须是唯一的,但值是可以被复制的。,13,.,6.1,映射接口,映射接口定义了映射的特性和本质。支持映射的三大接口如图,13.19,所示。,13,.,6.1,映射接口,Map,接口映射唯一关键字到值。关键字是以后用于检索值的对象。给定一个关键字和一个值,可以存储这个值到一个,Map,对象中。当这个值被存储以后,就可以使用它的关键字来检索它。,Map.Entry,接口使得可以操作映射的输入。而,SortMap,接口扩展了,Map,,它确保了各项关键字按升序排列。,Java,提供了几个用来实现映射接口的类。可以被用作映射的类如表,13.7,所示。,类名,类的描述,AbstractMap,实现大多数的,Map,接口,HashMap,将,AbstractMap,扩展到使用散列表,TreeMap,将,AbstractMap,扩展到使用树,13.6.2 HashMap,类,HashMap,类使用散列表实现,Map,接口。,HashMap,类的构造方法如图,13.20,所示。,13.6.2 HashMap,类,HashMap,类的主要方法与功能描述如表,13.8,所示。,方法,方法说明,public void clear(),删除映射中所有映射关系,public boolean containsKey(Object key),判断,HashMap,中是否包指定的键的映射关系,如果包含则返回,true,public boolean containsValue(Object value),判断,HashMap,中是否包指定的键值的映射关系,public V get(Object key),返回参数,key,键在该映射中所映射的值,public boolean isEmpty(),判断,HashMap,中是否包含键,-,值映射关系,如果不包含则返回,true,public V put(K key,V value),在映射中放入指定值与指定键,public void putAll(Map m),将指定映射的所有映射关系复制到此映射中,public int size(),返回映射中键,-,值映射关系的数目,public V remove(Object key),删除映射中存在该键的映射关系,13.6.2 HashMap,类,HashMap,实现,Map,并扩展,AbstractMap,。同,HashSet,一样,,HashMap,也不保证它的元素的顺序。,在向,HashMap,中添加元素时,不但要将元素添加,还要为每个元素设置一个,Hash,码。,Hash,码不只可以为数字,同样它也可以为字符串。,13.6.3 TreeMap,类,TreeMap,类通过使用树实现,Map,接口。,TreeMap,提供了按排序顺序存储关键字,/,值对的有效手段,同时允许快速检索。不像散列映射,树映射保证它的元素按照关键字升序排序。,TreeMap,的构造方法如图,13.22,所示。,13.6.3 TreeMap,类,TreeMap,实现,SortedMap,并且扩展,AbstractMap,。本身并没有定义其他方法。,TreeMap,的主要方法与功能我们可以用表,13.9,来表示。,方法,方法说明,clear(),从此,TreeMap,中删除所有映射关系,clone(),返回,TreeMap,实例的浅表复制,comparator(),返回用于对此映射进行排序的比较器,如果此映射使用它的键的自然顺序,则返回,null,containsKey(Objectkey),如果此映射包含对于指定的键的映射关系,则返回,true,containsValue(Objectvalue),如果此映射把一个或多个键映射到指定值,则返回,true,entrySet(),返回此映射所包含的映射关系的,set,视图,firstKey(),返回有序映射中当前第一个键,get(Objectkey),返回此映射中映射到指定键的值,headMap(KtoKey),返回此映射的部分视图,其键严格小于,toKey,keySet(),返回此映射中所包含的键的,Set,视图,lastKey(),返回有序映射中当前最后一个键,13,.,7,比较方法,TreeSet,和,TreeMap,都按排序顺序存储元素。然而,精确定义到底采用哪种“排序顺序”则是比较方法。在默认情况下,,Java,采用的是“自然排序”的顺序存储它们的元素,例如,A,在,B,的前面,,2,在,3,的前面,等等。如果需要用到其他的方法对元素进行排序,可以在构造集合或者映射时,指定一个,Comparator,对象。,Comparator,接口定义了两种方法:,compare(),和,equals(),。,compare(),方法的用法如图,13.24,所示。,13,.,7,比较方法,而,equals(),方法的用法如图,13.26,所示,。,但是在实际应用中是没有必要去重载,equals(),方法的。所以在这里我们就不再为大家举例了。,13,.,8,从前版本的类和接口,java.util,的最初版本中不包括类集框架。它定义了几个类和接口提供专门的方法用于存储对象。随着,Java,引入类集,有几种最初的类被重新设计成支持类集接口,因此它们与框架完全兼容。由,Java,定义的以前版本的类大致有:,Vector,、,Stack,、,Dictionary,、,Hashtable,和,Properties,。下面我们一一对其进行简要介绍。,13,.,8.1 Vector,类,Vector,类实现动态数组,这与,ArrayList,相似,但两者不同的是:,Vector,类是同步的,并且它包含了一些不属于类集框架的方法。但被重新定义后,,Vector,类已经完全兼容于类集框架了。,Vector,类的构造方法如图,13.27,所示。,所有的矢量开始都有一个原始的容量。在这个原始容量达到之后,下次再存储时,矢量会自动为那个对象分配空间。通过分配超过需要的内存,矢量减小了可能产生的分配的次数,节约了时间。,13,.,8.1 Vector,类,Vetor,提供了用于增加元素的方法,我们总结在表,13.10,中。,方法,方法描述,public void addElement(Object obj),将指定的组件添加到该向量的末尾,并将其大小增加,1,public void addElement(int index,Object obj),在向量的指定位置插入指定的元素,obj,,该位置及以后的元素位置后移,public void insertElementAt(Object obj,int index),将指定对象作为此向量中的组件插入到指定的,index,处,13,.,8.2 Stack,类,Stack,是,Vector,的一个子类,它实现标准的后进先出堆栈。,Stack,仅仅定义了创建空堆栈的默认构造方法。如图,13.30,所示。,Stack,类包括了,Vector,类定义的所有方法,同时增加了几种它自己定的方法,具体总结在表,13.10,中。,方法,功能描述,public E push(Object item),将元素引用压入栈顶,public E pop(),删除栈顶元素。栈为空则会抛出,EmptyStackException,异常,public E peek(),取得栈顶元素但不删除它。如果栈为空则会抛出,EmptyStackException,异常,public boolean empty(),判断堆栈是否为空,public int search(Object o),返回,Object,对象在栈中所处的位置。其中栈顶元素位置为,1,,以后依次递增,1,。如果对象不在栈中则返回,-1,13,.,8.2 Stack,类,在栈的操作中,先压入栈的元素在栈的最底部,删除元素是从栈顶开始的。也就是最后压入栈的元素将会被先删除掉。,13,.,8.3 Dictionary,类,字典(,Dictionary,)是一个表示关键字,/,值存储库的抽象类,同时它的操作和映射(,Map,)很类似。给定一个关键字和值,可以讲值存储到字典对象中。一旦这个值被存储了,就能够用关键字来检索它。因此与映射一样,字典可以被当做关键字,/,值对列表来考虑。但在当前版本的,Java,中,,Dictionary,类已经被,Map,类所取代,所以被认为已是过时的。所以我们也不再作详细的讨论,只要清楚其和映射的作用相同就可以了。,13,.,8.4 Hashtable,类,散列表(,Hashtable,)是,java.util,的一部分,同时也是,Dictionary,的具体实现。现在的,Hashtable,已经被集成到类集框架中。它与,HashMap,相似,但,Hashtable,是同步的。使用,Hashtable,时,指定一个对象作为关键字,同时指定与该关键字相关联的值。接着该关键字被散列,把得到的散列值作为存储在表中的值的下标。,Hashtable,的构造方法如图,13.32,所示。,13,.,8.4 Hashtable,类,第三种形式中,填充比必须介于,0.0,和,1.0,之间,它决定了在散列表向上调整大小之前的充满度。即当元素的个数大于散列表的容量乘以它的填充比时,散列表被扩展。如果没有指定填充比。则默认使用,0.75,。,13,.,8.5 Properties,类,属性(,Properties,)是,Hashtable,类的一个子类。它用来保持值的列表,其中关键字和值都是字符串。,Properties,类被许多其他的,Java,类所使用。例如,当获得系统环境值时,,System.get,Properties(),返回对象的类型。,Properties,类定义的构造方法如图,13.34,所示。,13.9,小结,在这一章中我们给大家介绍了,Java,集合框架,主要包括集合框架的概念、集合框架接口,以及列表、集合、映射三种结构还有迭代方法、比较方法和较早以前版本的类和接口等内容。本章的重点在于掌握列表、集合、映射三种结构还有迭代方法、比较方法。而本章难点则是对现在和以前版本中各种方法的理解和掌握。希望大家能多加练习来更好地理解集合框架的含义。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服