资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
大连交通大学软件学院 第15章泛型与集合框架 配合例子源代码一起使用 Java语言程序设计 辽宁省教育软件大赛参赛作品 1 2020 6 11 导读 主要内容泛型链表堆栈散列映射树集树映射重点和难点重点 泛型和集合的使用难点 集合的使用 2020 6 11 概述 在jdk1 2之后 Java提供了实现常见数据结构的类 这些实现数据结构的类通称为Java集合框架 在JDK1 5后 Java集合框架开始支持泛型 本章首先介绍泛型 然后讲解常见数据结构类的用法 2020 6 11 15 1泛型 泛型 Generics 是在JDK1 5中推出的 其主要目的是可以建立具有类型安全的集合框架 如链表 散列映射等数据结构 2020 6 11 15 1 1泛型类声明 可以使用 class名称 声明一个类 为了和普通的类有所区别 这样声明的类称作泛型类 如 classPeople其中People是泛型类的名称 E是其中的泛型 也就是说我们并没有指定E是何种类型的数据 它可以是任何对象或接口 但不能是基本类型数据 2020 6 11 15 1 2使用泛型类声明对象 泛型类声明和创建对象时 类名后多了一对 而且必须要用具体的类型替换 中的泛型 例如 ConeconeOne coneOne newCone newCircle 例子1 Example15 1 java Cone java Rect java Circle java 中 声明了一个泛型类 Cone 一个Cone对象计算体积时 只关心它的底是否能计算面积 并不关心底的类型 运行效果如图15 1 2020 6 11 15 2链表 链表是由若干个称作节点的对象组成的一种数据结构 每个节点含有一个数据和下一个节点的引用 2020 6 11 15 2 1LinkedList泛型类 LinkedList泛型类创建的对象以链表结构存储数据 习惯上称LinkedList类创建的对象为链表对象 例如 LinkedListmylist newLinkedList 创建一个空双链表 add Eobj 向链表依次增加节点 2020 6 11 15 2 2LinkedList泛型类常用方法 LinkedList泛型类实现Lis泛型接口中的一些常用方法 publicbooleanadd Eelement 向链表末尾添加一个新的节点 该节点中的数据是参数elememt指定的数据 publicvoidadd intindex Eelement 向链表的指定位置添加一个新的节点 该节点中的数据是参数elememt指定的数据 publicvoidclear 删除链表的所有节点 使当前链表成为空链表 publicEremove intindex 删除指定位置上的节点 publicbooleanremove Eelement 删除首次出现含有数据elemen的节点 publicEget intindex 得到链表中指定位置处节点中的数据 LinkedList泛型类本身新增加的一些常用方法publicvoidaddFirst Eelement 向链表的头添加新节点 该节点中的数据是参数elememt指定的数据 publicvoidaddLast Eelement 向链表的末尾添加新节点 该节点中的数据是参数elememt指定的数据 publicEgetFirst 得到链表中第一个节点中的数据 publicEgetLast 得到链表中最后一个节点中的数据 publicEremoveFirst 删除第一个节点 并返回这个节点中的数据 2020 6 11 15 2 3遍历链表 当用户需要遍历集合中的对象时 应当使用该集合提供的迭代器 而不是让集合本身来遍历其中的对象 由于迭代器遍历集合的方法在找到集合中的一个对象的同时 也得到待遍历的后继对象的引用 因此迭代器可以快速地遍历集合 链表对象可以使用iterator 方法获取一个Iterator对象 该对象就是针对当前链表的迭代器 例子2比较了使用迭代器遍历链表和get intindex 方法遍历链表的所用时间 运行效果如图15 4 例子3使用了JDK1 5版本之前的LinkedList 2020 6 11 15 2 4排序与查找 Collections类提供的用于排序和查找的类方法如下 publicstaticsort Listlist 该方法可以将list中的元素升序排列 intbinarySearch Listlist Tkey CompareToc 使用折半法查找list是否含有和参数key相等的元素 如果key链表中某个元素相等 方法返回和key相等的元素在链表中的索引位置 链表的索引位置从0考试 否则返回 1 例子4中 Student类通过实现Comparable接口规定该类的对象的大小关系 按height值的大小确定大小关系 即学生按其身高确定之间的大小关系 链表添加了3个Student对象 Collections调用sort方法将链表中的对象按身其height值升序排序 并查找一个对象的height值是否和链表中某个对象的height值相同 运行效果如图15 5 2020 6 11 15 2 5洗牌与旋转 Collections类还提供了将链表中的数据重新随机排列的类方法以及旋转链表中数据的类方法 publicstaticvoidshuffle Listlist 将list中的数据按洗牌算法重新随机排列 staticvoidrotate Listlist intdistance 旋转链表中的数据 publicstaticvoidreverse Listlist 翻转list中的数据 例子5使用了shuffle 方法 reverse 方法和rotate 方法 运行效果如图15 6 2020 6 11 15 3堆栈 堆栈是一种 后进先出 的数据结构 只能在一端进行输入或输出数据的操作 Stack泛型类创建一个堆栈对象 堆栈对象常用方法 publicEpush Eitem 实现压栈操作publicEpop 实现弹栈操作 publicbooleanempty 判断堆栈是否还有数据 publicEpeek 获取堆栈顶端的数据 但不删除该数据 publicintsearch Objectdata 获取数据在堆栈中的位置 例子6用堆栈输出该递归序列的若干项 2020 6 11 15 4散列映射 15 4 1HashMap泛型类HashMap对象采用散列表这种数据结构存储数据 习惯上称HashMap对象为散列映射 例如 HashMaphashtable HashSet hashtable可以存储 键 值 对数据 相关方法 publicVput Kkey Vvalue 将键 值对数据存放到散列映射中 该方法同时返回键所对应的值 2020 6 11 15 4 2常用方法 publicvoidclear 清空散列映射 publicObjectclone 返回当前散列映射的一个克隆 publicbooleancontainsKey Objectkey 如果散列映射有 键 值 对使用了参数指定的键 方法返回true 否则返回false publicbooleancontainsValue Objectvalue 如果散列映射有 键 值 对的值是参数指定的值 publicVget Objectkey 返回散列映射中使用key做键的 键 值 对中的值 publicbooleanisEmpty 如果散列映射不含任何 键 值 对 方法返回true 否则返回false publicVremove Objectkey 删除散列映射中键为参数指定的 键 值 对 并返回键对应的值 publicintsize 返回散列映射的大小 即散列映射中 键 值 对的数目 2020 6 11 15 4 3遍历散列映射 publicCollectionvalues 方法返回一个实现Collection接口类创建的对象 使用接口回调技术 即将该对象的引用赋给Collection接口变量 该接口变量可以回调iterator 方法获取一个Iterator对象 这个Iterator对象存放着散列映射中所有 键 值 对中的 值 2020 6 11 15 4 4基于散列映射的查询 对于经常需要进行查找的数据可以采用散列映射来存储这样的数据 即为数据指定一个查找它的关键字 然后按着 健 值 对 将关键字和数据一并存入散列映射中 例子7是一个英语单词查询的GUI程序 用户在界面的的一个文本框中输入一个英文单词回车确认 另一个文本框显示英文单词的汉语翻译 例子7中使用一个文本文件word txt来管理若干个英文单词及汉语翻译 例子7 Example15 7 java WindowWord java WordPolice java word txt 2020 6 11 15 5树集 15 5 1TreeSet泛型类TreeSet类创建的对象称作树集 例如TreeSetmytree newTreeSe 然后使用add方法为树集添加节点 例如mytree add boy 2020 6 11 15 5 2节点的大小关系 树集用add方法添加节点 节点会按其存放的数据的 大小 顺序一层一层地依次排列 在同一层中的节点从左到右按 大小 顺序递增排列 下一层的都比上一层的小 2020 6 11 15 5 3TreeSet类的常用方法 publicbooleanadd Eo 向树集添加加节点 publicvoidclear 删除树集中的所有节点 publicvoidcontains Objecto 如果树集中有包含参数指定的对象 该方法返回true 否则返回false publicEfirst 返回树集中的第一个节点中的数据 最小的节点 publicElast 返回最后一个节点中的数据 最大的节点 publicisEmpty 判断是否是空树集 如果树集不含任何节点 该方法返回true publicbooleanremove Objecto 删除树集中的存储参数指定的对象的最小节点 publicintsize 返回树集中节点的数目 例子8中的树集按着英语成绩从底到高存放四个Student对象 2020 6 11 15 6树映射 TreeMap类实现了Map接口 称TreeMap对象为树映射 树映射使用publicVput Kkey Vvalue 方法添加节点 例子9使用了TreeMap 分别按着学生的英语成绩和数学成绩排序节点 2020 6 11 15 7自动装箱与拆箱 JDK1 5新增的基本类型数据和相应的对象之间相互自动转换的功能 称作基本数据类型的自动装箱与拆箱 AutoboxingandAuto UnboxingofPrimitiveTypes 例子10使用了自动装箱与拆箱 2020 6 11 15 8应用举例 例子11 Example15 11 java Goods java InputArea java WindowGoods java 使用对象流实现商品库存的录入与显示系统 例子4中有一个实现接口Serializable的Goods类 程序将该类的对象作为链表的节点 然后把链表写入到文件 运行效果如图15 12 2020 6 11 总结 1学会使用 class名称 声明一个泛型类 2重点掌握各种集合框架类的使用 2020 6 11 作业 第四版教材 P4731 2020 6 11 本章结束 ThankYou
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号