Java的集合类课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java的集合类课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 集合 课件
- 资源描述:
-
1、第9章 Java的集合类学习重点:学习重点:集合类与普通数组的区别集合类与普通数组的区别各种集合类的特点及适用条件各种集合类的特点及适用条件第1页,共38页。第第9章章 Java的集合类的集合类 9.19.1 集合类概述集合类概述 9.2 9.2 原集合类原集合类 9.2.1 9.2.1 数组数组 9.2.2 Vector9.2.2 Vector类类 9.2.3 BitSet9.2.3 BitSet类类 9.2.49.2.4 Stack Stack类类 9.2.5 Hashtable9.2.5 Hashtable类类 9.39.3 新集合类新集合类 9.3.19.3.1 Collection
2、Collection 9.3.2 9.3.2 List List 9.3.39.3.3 Set Set 9.3.49.3.4 Map Map 9.3.59.3.5 Utilities Utilities 9.4 9.4 练习题练习题 第2页,共38页。9.1 9.1 集合类概述集合类概述集合类是用来存放某类对象的。我们知道,数组是有固定长度的,在定义数组的时候,就需集合类是用来存放某类对象的。我们知道,数组是有固定长度的,在定义数组的时候,就需要确定这个数组的内存空间,但很多时候我们不能确定需要存放多少元素,这时数组就显得要确定这个数组的内存空间,但很多时候我们不能确定需要存放多少元素,这时数
3、组就显得很不方便,这时就需要使用集合类。很不方便,这时就需要使用集合类。集合类有一个共同特点,就是它们只容纳对象集合类有一个共同特点,就是它们只容纳对象(实际上是对象名,既指向地址的指针实际上是对象名,既指向地址的指针),这一点和数组不同,数组可以容纳对象和简单数据。这一点和数组不同,数组可以容纳对象和简单数据。集合类容纳的对象都是集合类容纳的对象都是ObjectObject类的实例,一旦把一个对象置入集合类中,类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,也就是说,集合类中容纳的都是指向它的类信息将丢失,也就是说,集合类中容纳的都是指向ObjectObject类对象的类对象的指针。
4、指针。第3页,共38页。9.2 9.2 原集合类原集合类 9.2.1 数组数组例例9.1 数组中容纳对象和简单数据数组中容纳对象和简单数据这个程序中把对象和简单数据分别作为数组的元素,然后对它们分别操作这个程序中把对象和简单数据分别作为数组的元素,然后对它们分别操作 程序代码程序代码上面的程序中我们用同样的格式设计了两种数组:对象数组和简单数据类型数组,以进行比较。数组a只是初始化成一个null的对象名(指针),此时,编译器会禁止我们对 这个指针进行任何实际操作。数组b被初始化成指向由Weeble类对象构成的一个数组,但那个数组里实际 并未放置任何Weeble对象,所以数组b的元素都是空指针,
5、不能直接 使用,然而,我们仍然可以查询那个数组的大小,因为b指向的是一 个合法对象。这个程序中还用到对象间的赋值,对象间赋值传递的是 指针。第4页,共38页。例例9.2 对象数组的传递对象数组的传递 这个程序中我们用一个数组来存放香味名(字符串对象),然后从这个数组中随机抽出香味名,形成20个随机排列,并输出。计算中每次都形成一个新的对象数组,并在不同的方法中传递。程序代码程序代码flavorSet()方法创建了一个名为results的String数组。该数组的大小为n,具体数值取决于传递给方法的自变量。随后,它从数组flav里随机挑选一些香料(Flavor),并将它们置入results里,并
6、最终返回results。返回数组与返回其他任何对象没什么区别,返回的都是一个指针。另一方面,当flavorSet()随机挑选香料的时候,它需要保证以前挑选过的香料不会再次出现。main()能显示出20个完整的香味名集合,所以我们看到flavorSet()每次都用一个随机顺序选择香料。第5页,共38页。9.2.2 Vector类 该类实现了可变数组。和数组一样,它的元素可通过下标进行访该类实现了可变数组。和数组一样,它的元素可通过下标进行访问。问。VectorVector类的对象通过类的对象通过capacity和和capacityIncrement两个值来改两个值来改变集合的容量,变集合的容量,
7、capacitycapacity指示集合最多能容纳的元素个数,指示集合最多能容纳的元素个数,capacityIncrement指示每次增加多少容量,而不是一个一个增加指示每次增加多少容量,而不是一个一个增加的。的。第6页,共38页。这个类有这个类有3个属性、多个构造函数和许多其他方法。下面列举几个方法:个属性、多个构造函数和许多其他方法。下面列举几个方法:void addElement(Object obj)在集合的最后增加一个元素在集合的最后增加一个元素void add(int index,Object element)在指定位置增加一个元素在指定位置增加一个元素Object element
8、At(int index)返回指定位置的元素返回指定位置的元素void insertElementAt(Object obj,int index)在指定位置插入元素在指定位置插入元素void removeElementAt(int index)删除指定位置的元素删除指定位置的元素int catacity()返回当前容量返回当前容量int size()返回集合的元素个数返回集合的元素个数第7页,共38页。例例9.3 9.3 集合中元素必须是同类的对象集合中元素必须是同类的对象程序代码程序代码这个程序中只有在执行这个程序中只有在执行(Cat)cats.elementAt(7).print();的时
9、候抛出例外。的时候抛出例外。在这个程序中也看到了重新造型的格式:在这个程序中也看到了重新造型的格式:(Cat)cats.elementAt(i),因为因为一个集合的元素是一个一个集合的元素是一个ObjectObject类的对象,所以必须把它强制转换成类的对象,所以必须把它强制转换成CatCat类的对象进行操作。类的对象进行操作。第8页,共38页。能不能把元素转换成能不能把元素转换成DogDog类?类?答案是肯定的,把程序中的最后两句换成如下形式,就能把最后一个元答案是肯定的,把程序中的最后两句换成如下形式,就能把最后一个元素输出。素输出。for(int i=cats.size()-1;i=0;
10、i-)(Dog)cats.elementAt(i).print();这时的输出结果为:这时的输出结果为:Dog#7Exception in thread main java.lang.ClassCastException:Cat at CatsAndDogs.main(CatsAndDogs.java:31)第9页,共38页。程序中我们用到了程序中我们用到了size()size()这个方法来确定元素的个数,其实有另一个方这个方法来确定元素的个数,其实有另一个方法可以让程序自动检查元素的类型以及集合的最后一个该类型元素,这就法可以让程序自动检查元素的类型以及集合的最后一个该类型元素,这就是是En
11、umeration(Enumeration(枚举接口枚举接口),它是一个简单的反复器,它是一个简单的反复器(iterator)(iterator),它能实现,它能实现对集合的遍历。实现枚举的对象必须通过对集合的遍历。实现枚举的对象必须通过VectorVector类的方法类的方法elements()elements()来创来创建,这个方法返回反映当前集合内容的实现枚举的对象。然后通过枚举的建,这个方法返回反映当前集合内容的实现枚举的对象。然后通过枚举的方法实现对集合的遍历:方法实现对集合的遍历:Object nextElement()/获得下一个元素,定一次调用返回定一个元素bealoon ha
12、sMoreElements()/检查集合中是否有更多的元素第10页,共38页。我们就用这两个方法来代替上面的一部分程序,其中改动我们就用这两个方法来代替上面的一部分程序,其中改动import语句和主类如下:语句和主类如下:import java.util.*;/这一部分不变public class CatsAndDogs public static void main(String args)Vector cats=new Vector();for(int i=0;i 7;i+)cats.addElement(new Cat(i);cats.addElement(new Dog(7);/以下部
13、分是更新的代码 Enumeration e=cats.elements();/创建Enumeration对象e while(e.hasMoreElements()/使用e来完成集合的遍历 (Cat)e.nextElement().print();这个程序的输出结果同原先的程序,其中的黑体部分就是更改部分。使用Enumeration,我们不必关心集合中的元素数量。所有工作均由hasMoreElements()和nextElement()自动照管了。第11页,共38页。9.2.3 BitSet类类 这个类实际是由这个类实际是由“二进制位二进制位”构成的一个构成的一个VectorVector,即这个
14、,即这个VectorVector集合中的元素都是集合中的元素都是falsefalse或或truetrue,默认值都为,默认值都为falsefalse。此外,此外,BitSetBitSet的最小长度是一个长整数的最小长度是一个长整数(Long)(Long)的长度:的长度:6464位,位,这意味着假如我们准备保存比它更小的数据,如这意味着假如我们准备保存比它更小的数据,如8 8位数据,那么位数据,那么BitSetBitSet就显得浪费了。就显得浪费了。第12页,共38页。它有以下几个特殊的方法:它有以下几个特殊的方法:public void and(BitSet set)进行逻辑运算,还有or()
15、和xor()public int length()有效逻辑位的位数public int size()返回集合中的元素个数,最小为64public void set(int bitIndex)把指定位置的值置为truepublic void clear(int bitIndex)把指定位置的值置为falsepublic boolean get(int bitIndex)得到制定位置的值第13页,共38页。例例9.4 使用使用BitSet类类 这段程序的目的是随机产生一个数字串,然后逐一判断它每一个这段程序的目的是随机产生一个数字串,然后逐一判断它每一个二进制位是否为二进制位是否为1 1,是则在,
16、是则在BitSetBitSet的相应位置上置的相应位置上置truetrue,否则置,否则置falsefalse 888程序代码程序代码第14页,共38页。9.2.4 Stack类类 Stack类是类是Vector类的子类,它是一个类的子类,它是一个“后入先出后入先出”(LIFO,last-in-first-out)的集合。的集合。Stack的意思就是堆栈,堆栈就像一个桶,只有一个口,放入和取的意思就是堆栈,堆栈就像一个桶,只有一个口,放入和取出都用这个口,最后放入的东西能最先拿出,最先放入的东西只能最后拿出都用这个口,最后放入的东西能最先拿出,最先放入的东西只能最后拿出。通常在堆栈中存入数据称
17、为出。通常在堆栈中存入数据称为“压入压入”(push),取出数据成为,取出数据成为“弹弹出出”(pop)。由于压入和弹出都在堆栈口进行,所以位置很确定,这和其他。由于压入和弹出都在堆栈口进行,所以位置很确定,这和其他集合不同。和其他所有集合不同。和其他所有JavaJava集合一样,我们压入和弹出的都是对象,所以集合一样,我们压入和弹出的都是对象,所以必须对自己弹出的东西进行造型。必须对自己弹出的东西进行造型。第15页,共38页。这个类增加了这个类增加了5个方法:个方法:public Object push(Object item)把形参对象压入堆栈public Object pop()弹出第一
18、个对象public Object peek()并不取出的情况下,看定一个对象public boolean empty()是否为空public int search(Object o)检查第一个出现形参对象的位置第16页,共38页。例例9.5 堆栈类的使用堆栈类的使用 这个程序的目的是将英文的这个程序的目的是将英文的1212个月存放到一个个月存放到一个StackStack中,然后按顺序打中,然后按顺序打印出来。印出来。程序代码程序代码从这个程序的结果可以清楚地看到,先压入的后弹出,这个类的对象也可以使用从这个程序的结果可以清楚地看到,先压入的后弹出,这个类的对象也可以使用Vector类的方法,如
19、类的方法,如addElement()和和elementAt()等。等。第17页,共38页。9.2.5 Hashtable类类 这个类是字典类这个类是字典类(Dictionary)(Dictionary)的子类,字典类是抽象类,它达的子类,字典类是抽象类,它达到的目的是通过一个键到的目的是通过一个键(key)(key)来查找元素,这和实际的查字典及其来查找元素,这和实际的查字典及其相似。相似。第18页,共38页。该抽象类有许多方法,该抽象类有许多方法,size()size()告诉我们其中包含了多少元素,告诉我们其中包含了多少元素,isEmpty()isEmpty()判断是判断是否包含了元素否包含
展开阅读全文