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