第9章Java的集合类.ppt
《第9章Java的集合类.ppt》由会员分享,可在线阅读,更多相关《第9章Java的集合类.ppt(38页珍藏版)》请在三一办公上搜索。
1、第9章 Java的集合类,学习重点:集合类与普通数组的区别各种集合类的特点及适用条件,第9章 Java的集合类,9.1 集合类概述 9.2 原集合类 9.2.1 数组 9.2.2 Vector类 9.2.3 BitSet类 9.2.4 Stack类 9.2.5 Hashtable类 9.3 新集合类 9.3.1 Collection 9.3.2 List 9.3.3 Set 9.3.4 Map 9.3.5 Utilities 9.4 练习题,9.1 集合类概述,集合类是用来存放某类对象的。我们知道,数组是有固定长度的,在定义数组的时候,就需要确定这个数组的内存空间,但很多时候我们不能确定需要存
2、放多少元素,这时数组就显得很不方便,这时就需要使用集合类。集合类有一个共同特点,就是它们只容纳对象(实际上是对象名,既指向地址的指针),这一点和数组不同,数组可以容纳对象和简单数据。集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,也就是说,集合类中容纳的都是指向Object类对象的指针。,9.2 原集合类,9.2.1 数组例9.1 数组中容纳对象和简单数据这个程序中把对象和简单数据分别作为数组的元素,然后对它们分别操作 程序代码上面的程序中我们用同样的格式设计了两种数组:对象数组和简单数据类型数组,以进行比较。数组a只是初始化成一个null的对象名(指针
3、),此时,编译器会禁止我们对 这个指针进行任何实际操作。数组b被初始化成指向由Weeble类对象构成的一个数组,但那个数组里实际 并未放置任何Weeble对象,所以数组b的元素都是空指针,不能直接 使用,然而,我们仍然可以查询那个数组的大小,因为b指向的是一 个合法对象。这个程序中还用到对象间的赋值,对象间赋值传递的是 指针。,例9.2 对象数组的传递,这个程序中我们用一个数组来存放香味名(字符串对象),然后从这个数组中随机抽出香味名,形成20个随机排列,并输出。计算中每次都形成一个新的对象数组,并在不同的方法中传递。程序代码flavorSet()方法创建了一个名为results的String
4、数组。该数组的大小为n,具体数值取决于传递给方法的自变量。随后,它从数组flav里随机挑选一些香料(Flavor),并将它们置入results里,并最终返回results。返回数组与返回其他任何对象没什么区别,返回的都是一个指针。另一方面,当flavorSet()随机挑选香料的时候,它需要保证以前挑选过的香料不会再次出现。main()能显示出20个完整的香味名集合,所以我们看到flavorSet()每次都用一个随机顺序选择香料。,9.2.2 Vector类,该类实现了可变数组。和数组一样,它的元素可通过下标进行访问。Vector类的对象通过capacity和capacityIncrement两
5、个值来改变集合的容量,capacity指示集合最多能容纳的元素个数,capacityIncrement指示每次增加多少容量,而不是一个一个增加的。,这个类有3个属性、多个构造函数和许多其他方法。下面列举几个方法:,void addElement(Object obj)在集合的最后增加一个元素void add(int index,Object element)在指定位置增加一个元素Object elementAt(int index)返回指定位置的元素void insertElementAt(Object obj,int index)在指定位置插入元素void removeElementAt(i
6、nt index)删除指定位置的元素int catacity()返回当前容量int size()返回集合的元素个数,例9.3 集合中元素必须是同类的对象,程序代码这个程序中只有在执行(Cat)cats.elementAt(7).print();的时候抛出例外。在这个程序中也看到了重新造型的格式:(Cat)cats.elementAt(i),因为一个集合的元素是一个Object类的对象,所以必须把它强制转换成Cat类的对象进行操作。,能不能把元素转换成Dog类?,答案是肯定的,把程序中的最后两句换成如下形式,就能把最后一个元素输出。for(int i=cats.size()-1;i=0;i-)(
7、Dog)cats.elementAt(i).print();这时的输出结果为:Dog#7Exception in thread main java.lang.ClassCastException:Cat at CatsAndDogs.main(CatsAndDogs.java:31),程序中我们用到了size()这个方法来确定元素的个数,其实有另一个方法可以让程序自动检查元素的类型以及集合的最后一个该类型元素,这就是Enumeration(枚举接口),它是一个简单的反复器(iterator),它能实现对集合的遍历。实现枚举的对象必须通过Vector类的方法elements()来创建,这个方法返
8、回反映当前集合内容的实现枚举的对象。然后通过枚举的方法实现对集合的遍历:Object nextElement()/获得下一个元素,定一次调用返回定一个元素bealoon hasMoreElements()/检查集合中是否有更多的元素,我们就用这两个方法来代替上面的一部分程序,其中改动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.addElem
9、ent(new Cat(i);cats.addElement(new Dog(7);/以下部分是更新的代码 Enumeration e=cats.elements();/创建Enumeration对象e while(e.hasMoreElements()/使用e来完成集合的遍历(Cat)e.nextElement().print();这个程序的输出结果同原先的程序,其中的黑体部分就是更改部分。使用Enumeration,我们不必关心集合中的元素数量。所有工作均由hasMoreElements()和nextElement()自动照管了。,9.2.3 BitSet类,这个类实际是由“二进制位”构成
10、的一个Vector,即这个Vector集合中的元素都是false或true,默认值都为false。此外,BitSet的最小长度是一个长整数(Long)的长度:64位,这意味着假如我们准备保存比它更小的数据,如8位数据,那么BitSet就显得浪费了。,它有以下几个特殊的方法:,public void and(BitSet set)进行逻辑运算,还有or()和xor()public int length()有效逻辑位的位数public int size()返回集合中的元素个数,最小为64public void set(intbitIndex)把指定位置的值置为truepublic void cle
11、ar(intbitIndex)把指定位置的值置为falsepublic boolean get(intbitIndex)得到制定位置的值,例9.4 使用BitSet类,这段程序的目的是随机产生一个数字串,然后逐一判断它每一个二进制位是否为1,是则在BitSet的相应位置上置true,否则置false 888程序代码,9.2.4 Stack类,Stack类是Vector类的子类,它是一个“后入先出”(LIFO,last-in-first-out)的集合。Stack的意思就是堆栈,堆栈就像一个桶,只有一个口,放入和取出都用这个口,最后放入的东西能最先拿出,最先放入的东西只能最后拿出。通常在堆栈中存
12、入数据称为“压入”(push),取出数据成为“弹出”(pop)。由于压入和弹出都在堆栈口进行,所以位置很确定,这和其他集合不同。和其他所有Java集合一样,我们压入和弹出的都是对象,所以必须对自己弹出的东西进行造型。,这个类增加了5个方法:,public Object push(Objectitem)把形参对象压入堆栈public Object pop()弹出第一个对象public Object peek()并不取出的情况下,看定一个对象public boolean empty()是否为空public int search(Objecto)检查第一个出现形参对象的位置,例9.5 堆栈类的使用,
13、这个程序的目的是将英文的12个月存放到一个Stack中,然后按顺序打印出来。程序代码从这个程序的结果可以清楚地看到,先压入的后弹出,这个类的对象也可以使用Vector类的方法,如addElement()和elementAt()等。,9.2.5 Hashtable类,这个类是字典类(Dictionary)的子类,字典类是抽象类,它达到的目的是通过一个键(key)来查找元素,这和实际的查字典及其相似。,该抽象类有许多方法,size()告诉我们其中包含了多少元素,isEmpty()判断是否包含了元素(是则为true),put(Object key,Object value)添加一个值,并将其同一个键
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 集合
链接地址:https://www.31ppt.com/p-5931174.html