Java-2实用教程第4版-第15章-泛型与集合框架-PPT.ppt

上传人:可**** 文档编号:92780289 上传时间:2023-06-13 格式:PPT 页数:26 大小:364.50KB
返回 下载 相关 举报
Java-2实用教程第4版-第15章-泛型与集合框架-PPT.ppt_第1页
第1页 / 共26页
Java-2实用教程第4版-第15章-泛型与集合框架-PPT.ppt_第2页
第2页 / 共26页
点击查看更多>>
资源描述

《Java-2实用教程第4版-第15章-泛型与集合框架-PPT.ppt》由会员分享,可在线阅读,更多相关《Java-2实用教程第4版-第15章-泛型与集合框架-PPT.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 第第15章章 泛型与泛型与集合框架集合框架 配合例子源代码一起使用 Java 语言程序设计语言程序设计 辽宁省教育软件大赛参赛作品辽宁省教育软件大赛参赛作品 1导读导读主要内容主要内容泛型泛型链表链表堆栈堆栈散列映射散列映射树集树集树映射树映射重点和难点重点和难点重点:泛型和集合的使用重点:泛型和集合的使用难点:集合的使用难点:集合的使用概述概述在在jdk1.2之后,之后,Java提供了实现常见数据结构的类,这些实现提供了实现常见数据结构的类,这些实现数据结构的类通称为数据结构的类通称为Java集合框架。在集合框架。在JDK1.5后,后,Java集合框集合框架开始支持泛型,本章首先介绍泛型,

2、然后讲解常见数据结构架开始支持泛型,本章首先介绍泛型,然后讲解常见数据结构类的用法。类的用法。15.1 泛型泛型泛型(泛型(Generics)是在是在JDK1.5中推出的,其主要目的是可以建中推出的,其主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。立具有类型安全的集合框架,如链表、散列映射等数据结构。15.1.1 泛型类声明泛型类声明可以使用可以使用“class 名称名称”声明一个类声明一个类,为了和普通的为了和普通的类有所区别,这样声明的类称作泛型类类有所区别,这样声明的类称作泛型类,如:如:class People 其中其中People是泛型类的名称,是泛型类的名称

3、,E是其中的泛型,也就是说我们并是其中的泛型,也就是说我们并没有指定没有指定E是何种类型的数据,它可以是任何对象或接口,但是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据。不能是基本类型数据。15.1.2 使用泛型类声明对象使用泛型类声明对象泛型类声明和创建对象时,类名后多了一对泛型类声明和创建对象时,类名后多了一对“”,而且必须,而且必须要用具体的类型替换要用具体的类型替换“”中的泛型。例如:中的泛型。例如:Cone coneOne;coneOne=new Cone(new Circle();例子例子1(Example15_1.java,Cone.java,Rect.java,

4、Circle.java)中,声明了一个泛型类:Cone,一个Cone对象计算体积时,只关心它的底是否能计算面积,并不关心底的类型。运行效果如图15.1。15.2 链表链表链表是由若干个称作节点的对象组成的一种数据结构,每个节链表是由若干个称作节点的对象组成的一种数据结构,每个节点含有一个数据和下一个节点的引用点含有一个数据和下一个节点的引用。15.2.1 LinkedListLinkedList泛型类泛型类LinkedList泛型类创建的对象以链表结构存储数据,习惯上泛型类创建的对象以链表结构存储数据,习惯上称称LinkedList类创建的对象为链表对象。例如,类创建的对象为链表对象。例如,L

5、inkedList mylist=new LinkedList();创建一个空双链表。创建一个空双链表。add(E obj)向链表依次增加节点向链表依次增加节点大家有疑问的,可以询问和交流大家有疑问的,可以询问和交流可以互相讨论下,但要小声点可以互相讨论下,但要小声点可以互相讨论下,但要小声点可以互相讨论下,但要小声点大家有疑问的,可以询问和交流大家有疑问的,可以询问和交流可以互相讨论下,但要小声点可以互相讨论下,但要小声点可以互相讨论下,但要小声点可以互相讨论下,但要小声点15.2.2 LinkedListLinkedList泛型类常用方法泛型类常用方法 LinkedList泛型类实现泛型类

6、实现Lis泛型接口中的一些常用方法。泛型接口中的一些常用方法。public boolean add(E element)向链表末尾添加一个新的节点,该节点中的向链表末尾添加一个新的节点,该节点中的数据是参数数据是参数elememt指定的数据。指定的数据。public void add(int index,E element)向链表的指定位置添加一个新的节点,向链表的指定位置添加一个新的节点,该节点中的数据是参数该节点中的数据是参数elememt指定的数据。指定的数据。public void clear()删除链表的所有节点,使当前链表成为空链表。删除链表的所有节点,使当前链表成为空链表。pub

7、lic E remove(int index)删除指定位置上的节点。删除指定位置上的节点。public boolean remove(E element)删除首次出现含有数据删除首次出现含有数据elemen的节点。的节点。public E get(int index)得到链表中指定位置处节点中的数据。得到链表中指定位置处节点中的数据。LinkedList泛型类本身新增加的一些常用方法泛型类本身新增加的一些常用方法 public void addFirst(E element)向链表的头添加新节点,该节点中的数据向链表的头添加新节点,该节点中的数据是参数是参数elememt指定的数据。指定的数据

8、。public void addLast(E element)向链表的末尾添加新节点,该节点中的数向链表的末尾添加新节点,该节点中的数据是参数据是参数elememt指定的数据。指定的数据。public E getFirst()得到链表中第一个节点中的数据。得到链表中第一个节点中的数据。public E getLast()得到链表中最后一个节点中的数据。得到链表中最后一个节点中的数据。public E removeFirst()删除第一个节点,并返回这个节点中的数据。删除第一个节点,并返回这个节点中的数据。15.2.3 遍历链表遍历链表当用户需要遍历集合中的对象时,应当使用该集合提供的迭代当用户

9、需要遍历集合中的对象时,应当使用该集合提供的迭代器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集器,而不是让集合本身来遍历其中的对象。由于迭代器遍历集合的方法在找到集合中的一个对象的同时,也得到待遍历的后合的方法在找到集合中的一个对象的同时,也得到待遍历的后继对象的引用,因此迭代器可以快速地遍历集合。继对象的引用,因此迭代器可以快速地遍历集合。链表对象可以使用链表对象可以使用iterator()方法获取一个方法获取一个Iterator对象,该对象对象,该对象就是针对当前链表的迭代器。就是针对当前链表的迭代器。例子例子2 比较了使用迭代器遍历链表和比较了使用迭代器遍历链表和get(int

10、index)方法遍历链方法遍历链表的所用时间,运行效果如图表的所用时间,运行效果如图15.4。例子例子3 使用了使用了JDK1.5版本之前的版本之前的LinkedList。15.2.4 排序与查找排序与查找Collections类提供的用于排序和查找的类方法如下:类提供的用于排序和查找的类方法如下:public static sort(List list)该方法可以将list中的元素升序排列。int binarySearch(List list,T key,CompareTo c)使用折半法查找list是否含有和参数key相等的元素,如果key链表中某个元素相等,方法返回和key相等的元素在链

11、表中的索引位置(链表的索引位置从0考试),否则返回-1。例子例子4中,中,Student类通过实现类通过实现Comparable接口规定该类的对象接口规定该类的对象的大小关系(按的大小关系(按height值的大小确定大小关系,即学生按其身高值的大小确定大小关系,即学生按其身高确定之间的大小关系)。链表添加了确定之间的大小关系)。链表添加了3个个Student对象,对象,Collections调用调用sort方法将链表中的对象按身其方法将链表中的对象按身其height值升序排值升序排序,并查找一个对象的序,并查找一个对象的height值是否和链表中某个对象的值是否和链表中某个对象的height值

12、相同。运行效果如图值相同。运行效果如图15.5。15.2.5 洗牌与旋转洗牌与旋转Collections类还提供了将链表中的数据重新随机排列的类方法以类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法。及旋转链表中数据的类方法。public static void shuffle(List list)将list中的数据按洗牌算法重新随机排列。static void rotate(List list,int distance)旋转链表中的数据。public static void reverse(List list)翻转list中的数据。例子例子5 使用了使用了shuffle

13、()方法、方法、reverse()方法和方法和rotate()方法,运行方法,运行效果如图效果如图15.6。15.3 堆栈堆栈堆栈是一种堆栈是一种“后进先出后进先出”的数据结构,只能在一端进行输入或的数据结构,只能在一端进行输入或输出数据的操作。输出数据的操作。Stack泛型类创建一个堆栈对象,堆栈对象常用方法:泛型类创建一个堆栈对象,堆栈对象常用方法:public E push(E item);实现压栈操作public E pop();实现弹栈操作。public boolean empty();判断堆栈是否还有数据。public E peek();获取堆栈顶端的数据,但不删除该数据。publ

14、ic int search(Object data);获取数据在堆栈中的位置。例子例子6 用堆栈输出该递归序列的若干项 15.4 散列映射散列映射15.4.1 HashMapHashMap泛型类泛型类HashMap对象采用散列表这种数据结构存储数据,习惯上对象采用散列表这种数据结构存储数据,习惯上称称HashMap对象为散列映射。对象为散列映射。例如例如:HashMap hashtable=HashSet();hashtable可以存储可以存储“键键/值值”对数据。对数据。相关方法:相关方法:public V put(K key,V value)将键将键/值对数据存放到散列映射中,该值对数据存

15、放到散列映射中,该方法同时返回键所对应的值。方法同时返回键所对应的值。15.4.2 常用方法常用方法public void clear()清空散列映射。清空散列映射。public Object clone()返回当前散列映射的一个克隆。返回当前散列映射的一个克隆。public boolean containsKey(Object key)如果散列映射有如果散列映射有“键键/值值”对对使用了参数指定的键,方法返回使用了参数指定的键,方法返回true,否则返回否则返回false。public boolean containsValue(Object value)如果散列映射有如果散列映射有“键键/

16、值值”对的值是参数指定的值。对的值是参数指定的值。public V get(Object key)返回散列映射中使用返回散列映射中使用key做键的做键的“键键/值值”对对中的值。中的值。public boolean isEmpty()如果散列映射不含任何如果散列映射不含任何“键键/值值”对,方法对,方法返回返回true,否则返回否则返回false。public V remove(Object key)删除散列映射中键为参数指定的删除散列映射中键为参数指定的“键键/值值”对,并返回键对应的值。对,并返回键对应的值。public int size()返回散列映射的大小,即散列映射中返回散列映射的大

17、小,即散列映射中“键键/值值”对的数对的数目。目。15.4.3 遍历散列映射遍历散列映射 public Collection values()方法返回一个实现方法返回一个实现Collection接口类创建的对象。接口类创建的对象。使用接口回调技术,即将该对象的引用赋给使用接口回调技术,即将该对象的引用赋给Collection接口接口变量,该接口变量可以回调变量,该接口变量可以回调iterator()方法获取一个方法获取一个Iterator对象,对象,这个这个Iterator对象存放着散列映对象存放着散列映 射中所有射中所有“键键/值值”对中的对中的“值值”。15.4.4 基于散列映射的查询基于

18、散列映射的查询对于经常需要进行查找的数据可以采用散列映射来存储这样的对于经常需要进行查找的数据可以采用散列映射来存储这样的数据,即为数据指定一个查找它的关键字,然后按着数据,即为数据指定一个查找它的关键字,然后按着“健健-值值”对,将关键字和数据一并存入散列映射中。对,将关键字和数据一并存入散列映射中。例子7 是一个英语单词查询的GUI程序,用户在界面的的一个文本框中输入一个英文单词回车确认,另一个文本框显示英文单词的汉语翻译。例子7中使用一个文本文件word.txt来管理若干个英文单词及汉语翻译 例子例子7(Example15_7.java,WindowWord.java,WordPolic

19、e.java,word.txt)15.5 树集树集 15.5.1 TreeSetTreeSet泛型类泛型类TreeSet类创建的对象称作树集。类创建的对象称作树集。例如例如 TreeSet mytree=new TreeSe();然后使用然后使用add方法为树集添加节点,例如方法为树集添加节点,例如 mytree.add(boy);15.5.2 节点的大小关系节点的大小关系树集用树集用add方法添加节点,节点会按其存放的数据的方法添加节点,节点会按其存放的数据的“大小大小”顺序一层一层地依次排列,在同一层中的节点从左到右按顺序一层一层地依次排列,在同一层中的节点从左到右按“大大小小”顺序递增排

20、列,下一层的都比上一层的小。顺序递增排列,下一层的都比上一层的小。15.5.3 TreeSetTreeSet类的常用方法类的常用方法public boolean add(E o)向树集添加加节点。public void clear()删除树集中的所有节点。public void contains(Object o)如果树集中有包含参数指定的对象,该方法返回true,否则返回false。public E first()返回树集中的第一个节点中的数据(最小的节点)。public E last()返回最后一个节点中的数据(最大的节点)。public isEmpty()判断是否是空树集,如果树集不含任

21、何节点,该方法返回true。public boolean remove(Object o)删除树集中的存储参数指定的对象的最小节点。public int size()返回树集中节点的数目。例子例子8 中的树集按着英语成绩从底到高存放四个中的树集按着英语成绩从底到高存放四个Student对象。对象。15.6 树映射树映射TreeMap类实现了类实现了Map接口,称接口,称TreeMap对对象为树映射。象为树映射。树映射使用树映射使用public V put(K key,V value);方法添加节点。方法添加节点。例子例子9 使用了使用了TreeMap,分别按着学生的英语成绩和数学成绩,分别按着

22、学生的英语成绩和数学成绩排序节点。排序节点。15.7 自动装箱与拆箱自动装箱与拆箱JDK1.5新增的基本类型数据和相应的对象之间相互自动转换的新增的基本类型数据和相应的对象之间相互自动转换的功能,称作基本数据类型的自动装箱与拆箱(功能,称作基本数据类型的自动装箱与拆箱(Autoboxing and Auto-Unboxing of Primitive Types)。)。例子例子10 使用了自动装箱与拆箱。使用了自动装箱与拆箱。15.8 应用举例应用举例 例子例子11(Example15_11.java,Goods.java,InputArea.java,WindowGoods.java)使使用用对对象象流流实实现现商商品品库库存存的的录录入入与与显显示示系系统统。例例子子4中中有有一一个个实实现现接接口口Serializable的的Goods类类,程程序序将将该该类类的的对对象象作作为为链链表表的的节节点点,然然后把链表写入到文件。运行效果如图后把链表写入到文件。运行效果如图15.12。总结总结1 学会学会使用使用“class 名称名称”声明一个泛型类声明一个泛型类。2 重点掌握各种集合框架类的使用重点掌握各种集合框架类的使用。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁