任务8 系统存储结构优化教学课件 Java程序设计项目化教程.pptx
《任务8 系统存储结构优化教学课件 Java程序设计项目化教程.pptx》由会员分享,可在线阅读,更多相关《任务8 系统存储结构优化教学课件 Java程序设计项目化教程.pptx(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、任务8系统存储结构优化教学课件Java程序设计项目化教程J J 程程 序序 设设 计计任务8:系统存储结构优化1 任务描述 目录2 技术准备3 任务实施Java程序设计1、任务描述学生信息管理系统采用数组来存放学生对象,采用数组有一些不够灵活的地方。首先数组长度是固定的,一旦确定后不允许改变,但实际要管理的学生数目可能是需要随时变化的,如开学时有新生来,毕业时有学生离去。二是数组本身做插入、删除时涉及大量的元素移动的操作,而且这些操作都需要开发人员自行去实现,因此使用起来不太方便。项目组决定对学生信息管理系统的存储结构进行优化,不再采用数组,而是采用使用更加方便灵活的集合来实现。要实现本任务,
2、需要了解和掌握Java中各种集合的使用。2.1 Collection接口 技术准备2.2 List接口2.3 Set接口2.4 Map接口2.5 集合遍历 2.6 泛型2.7 Collections和Arrays工具类2.8 聚合操作Java程序设计2.1 Collection接口Java中的集合就像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯上简称为对象)。这些对象可以是任意的数据类型,并且长度可变。Java集合中只能存放引用类型的数据,不能存放基本类型数据。集合按照其存储结构可以分为两大类,单列集合Collection和双列集合Map。Collection是单列集合根接口
3、,用于存储一系列符合某种规则的元素。Collection集合有两个重要的子接口,分别是List和Set。List集合的特点是元素有序、可重复。该接口的主要实现类有ArrayList和LinkedList。Set集合的特点是元素无序并且不可重复。该接口的主要实现类有HashSet和TreeSet。Map是双列集合根接口,用于存储具有键(Key)、值(Value)映射关系的元素。Map集合中每个元素都包含一对键值,并且Key唯一,在使用Map集合时通过指定的Key找到对应的Value。Map接口的主要实现类有HashMap和TreeMap。Java程序设计2.1 Collection接口集合体系结
4、构:这些集合接口及实现类都位于java.util包中,使用时需要导入。Java程序设计2.1 Collection接口Collection接口主要方法:方法声明方法声明功能描述功能描述booleanadd(Objecto)向集合中添加一个元素booleanaddAll(Collectionc)将指定集合c中的所有元素添加到该集合中voidclear()删除该集合中的所有元素booleanremove(Objecto)删除该集合中指定的元素booleanremoveAll(Collectionc)删除该集合中包含指定集合c中的所有元素booleanisEmpty()判断该集合是否为空boolea
5、ncontains(Objecto)判断该集合中是否包含某个元素booleancontainsAll(Collectionc)判断该集合中是否包含指定集合c中的所有元素Iteratoriterator()返回在该集合的元素上进行迭代的迭代器(Iterator),用于遍历该集合所有元素intsize()获取该集合元素个数Streamstream()将集合源转换为有序元素的流对象Java程序设计2.2 List接口List接口继承自Collection接口,是单列集合的一个重要分支,通常将实现了List接口的对象称为List集合(或List列表)。List集合通常用于存放一组可重复、有序(元素有先
6、后次序之分)的元素,可通过下标来获取某一位置上的元素。List是Collection的子接口,继承了Collection接口的全部方法,同时又增加了一些自身特有的方法。Java程序设计2.2 List接口List接口主要方法。方法声明方法声明功能描述功能描述voidadd(intindex,Objectelement)在末尾或指定位置添加元素booleanaddAll(intindex,Collectionc)在末尾或指定位置插入集合c中所有元素Objectget(intindex)返回指定位置上的元素Objectremove(intindex|Objecto)删除指定位置或指定的元素,并返回
7、删除的元素Objectset(intindex,Objectelement)设置指定位置上的元素,返回设置后的元素intindexOf(Objecto)返回元素在集合中首次出现的位置intlastIndexOf(Objecto)返回元素在集合中最后一次出现的位置ListsubList(intfromIndex,inttoIndex)返回指定范围内(不包括结束位置)所有元素集合组成的子集合ObjecttoArray()将集合元素转换为数组defaultvoidsort(Comparatorc)根据指定的比较器规则对集合元素排序Java程序设计2.2 List接口1.ArrayListArrayL
8、ist是List接口的一个实现类,也是程序中经常使用的一种数据结构。在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,可以将ArrayList看作是一个长度可变的数组。通过List接口和Collection接口提供的一些方法可方便地对ArrayList进行操作,如添加、删除、修改元素等。Java程序设计2.2 List接口【例 81】ArrayList使用示例Java程序设计2.2 List接口Java程序设计2.2 List接口Java程序设计2.2 List接口2.LinkedListLinked
9、List是List接口的另一个实现类。该集合内部采用一个双向链表来存放元素,双向链表对于节点的增删效率比用数组要高,因此比较适合需要频繁进行元素增删操作的场合。ArrayList内部是用数组来存放元素,对于元素的查找、遍历比较高效,但对于元素的增、删则效率相对校低。因此比较适合于元素的查找和遍历的场合。LinkedList集合除了继承自Collection和List接口的方法外,针对元素的增删又定义了一些特有的方法。Java程序设计2.2 List接口LinkedList特有方法。方法声明方法声明功能描述功能描述voidaddFirst(Objecto)将指定元素插入集合的开头voidaddL
10、ast(Objecto)将指定元素添加到集合的末尾ObjectgetFirst()返回集合的第一个元素ObjectgetLast()返回集合的最后一个元素ObjectremoveFirst()移除并返回集合的第一个元素ObjectremoveLast()移除并返回集合的最后一个元素booleanoffer(Objecto)将指定元素添加到集合的末尾booleanofferFirst(Objecto)将指定元素添加到集合的开头booleanofferLast(Objecto)将指定元素添加到集合的末尾Objectpeek()获取集合的第一个元素ObjectpeekFirst()获取集合的第一个元
11、素ObjectpeekLast()获取集合的最后一个元素Objectpoll()移除并返回集合的第一个元素ObjectpollFirst()移除并返回集合的第一个元素ObjectpollLast()移除并返回集合的最后一个元素voidpush(Objecto)将指定元素添加到集合的开头Objectpop()移除并返回集合的第一个元素Java程序设计2.2 List接口【例 82】LinkedList常用方法使用示例Java程序设计2.2 List接口Java程序设计2.3 Set接口Set接口和List接口一样,同样继承自Collection接口。Set集合中存放的是一组无序(没有先后位置之分
12、)、没有重复的元素。Set接口主要有两个实现类:HashSet和TreeSet。HashSet是根据元素的哈希值来确定元素在集合中的存储位置,具有良好的存取和查找性能。TreeSet是以二叉树的方式来存储元素,它可以实现对集合中的元素进行排序。Java程序设计2.3 Set接口Set集合常用方法。方法声明方法声明功能描述功能描述booleanadd(Ee)添加元素booleanaddAll(Collectionc)添加集合c中所有元素inthashCode()返回元素的哈希值booleanequals(Objecto)判断两个集合是否相等ObjecttoArray()将集合元素转换为数组Jav
13、a程序设计2.3 Set接口1.HashSetHashSet是Set接口的一个实现类。HashSet集合中存放的元素是无序、唯一的。当向HashSet集合中添加一个元素时:首先会调用该元素的hashCode()方法来确定元素的存储位置,然后再调用元素对象的equals()方法来确保集合中没有重复元素。Java程序设计2.3 Set接口【例 83】HashSet使用示例提示:集合中只能存放引用类型数据,不能存放提示:集合中只能存放引用类型数据,不能存放基本类型数据。代码中表面看是往集合中添加了基本类型数据。代码中表面看是往集合中添加了基本类型数据,实际上系统自动将其转换成了相基本类型数据,实际上
14、系统自动将其转换成了相对应的包装类数据,即自动装箱。对应的包装类数据,即自动装箱。Java程序设计2.3 Set接口在Java中,一些基本类型数据包装类、String类等都已经默认重写了hashCode()和equals()方法,因此往HashSet集合中添加这些类型的元素时,系统能够保证集合中没有重复元素。但对于自定义的数据类型,如用户自定义的类,如果没有重写hashCode()和equals()方法则没法实现自动去重功能。Java程序设计2.3 Set接口【例 84】在HashSet集合中存入自定义类对象。自定自定义类没有重写没有重写hashCode()和和equals()方法,所以无法方
15、法,所以无法实现自自动去重去重Java程序设计2.3 Set接口【例 85】在HashSet集合中存入自定义类对象时实现自动去重。至于自定义的两个对象如何认定其相同,可以根据实际需至于自定义的两个对象如何认定其相同,可以根据实际需要自行定义。要自行定义。本例中本例中只要是两个只要是两个id(学号)值相同,即认(学号)值相同,即认为两个对象是相同的。为两个对象是相同的。Java程序设计2.3 Set接口2.TreeSetTreeSet是Set接口的另一个实现类,它内部采用平衡二叉树来存储元素,来保证TreeSet集合中没有重复的元素,并且可以对元素进行排序。二叉树就是每个节点最多有两个子节点的有
16、序树,每个节点及其子节点组成的树称为子树,左侧的节点称为“左子树”,右侧的节点称为“右子树”,其中左子树上的元素小于它的根结点,而右子树上的元素大于它的根结点。因其存储结构的特殊性,TreeSet集合本身提供了一些特有方法来操作集合。Java程序设计2.3 Set接口TreeSet集合特有方法:方法声明方法声明功能描述功能描述Objectfirst()返回集合的首个元素Objectlast()返回集合的最后一个元素Objectlower(Objecto)返回集合中小于给定元素的最大元素,如果没有返回nullObjectfloor(Objecto)返回集合中小于或等于给定元素的最大元素,如果没有
17、返回nullObjecthigher(Objecto)返回集合中大于给定元素的最小元素,如果没有返回nullObjectceiling(Objecto)返回集合中大于或等于给定元素的最小元素,如果没有返回nullObjectpollFirst()移除并返回集合的第一个元素ObjectpollLast()移除并返回集合的最后一个元素Java程序设计2.3 Set接口【例 86】TreeSet集合使用示例Java程序设计2.3 Set接口在向TreeSet集合中添加元素时,会调用compareTo()方法进行比较排序,该方法是Comparable接口中定义的,Java的基础类型包装类和String
18、类都实现了Comparable接口,并默认实现了接口中的CompareTo()方法,因此当往集合中添加这些类型的数据时,系统会自动进行排序。但是当往集合中添加自定义数据类型数据时,由于这些自定义类型的数据没有实现Comparable接口,因此也就无法直接在TreeSet集合中进行排序操作。为了解决此问题,Java提供了两种TreeSet的排序规则:自然排序和定制排序。Java程序设计2.3 Set接口(1)自然排序)自然排序默认情况下,TreeSet集合都采用自然排序。自然排序要求向TreeSet集合存储的元素所在类必须实现Comparable接口,并重写compareTo()方法,然后Tre
19、eSet集合就会对该类型元素调用CompareTo()方法进行比较,并默认进行升序排序。Java程序设计2.3 Set接口【例 87】自然排序Java程序设计2.3 Set接口(2)定制排序)定制排序有时候,用户自定义的类型数据所在类没有实现Comparable接口,或者是实现了Comparable接口,但不想按其定义的CompareTo()方法进行排序。例如对于字符串不想按其事先定义的按英文字母的顺序进行排序,而是希望按照字符串长度进行排序;或者是对于数值型数据,不想按默认的按数值大小升序排列,想降序排序,这时就可以通过定制排序来实现。定制排序是在创建TreeSet集合时就自定义一个比较器来
20、对元素进行自定义排序。自定义比较器需要实现Comparator接口中的compare()方法。Java程序设计2.3 Set接口【例 88】对TreeSet集合中字符串按长度进行升序排序因因Comparator接口是一个函数式接口,因此定接口是一个函数式接口,因此定制排序也可直接利用制排序也可直接利用Lambda表达式来实现排序表达式来实现排序规则的定制。规则的定制。Java程序设计2.3 Set接口【例 89】对TreeSet集合中字符串按长度进行降序排序Java程序设计2.4 Map接口Map接口是一种双列集合,它的每个元素都是一个键值对的组合,键(Key)和值(Value)之间存在一种对
21、应关系,称为映射。如每个学生都有唯一的学号,一个学号对应一个学生,学号与学生之间就是一对一的关系。这种映射关系是一对一的,即一个键对应唯一的一个值,其中键和值可以是任意数据类型,键不允许有重复,值可以有重复。如学号与姓名之间,学号作为键不能有重复值,但姓名作为值可以有重复值。即可能会有同名的学生,但他们的学号是不同的,给定一个学号,只能找到与其对应的一个姓名。因此在访问Map集合中的元素时,是根据指定的键,来找到其对应的值。Java程序设计2.4 Map接口Map接口中常用的方法:方法声明方法声明功能描述功能描述voidput(Objectkey,Objectvalue)向Map集合中添加元素
22、intsize()返回Map集合元素的个数Objectget(Objectkey)返回指定键所对应的值,如果键不存在,则返回nullbooleancontainsKey(Objectkey)查看Map集合中是否存在指定的键keybooleancontainsValue(Objectvalue)查看Map集合中是否存在指定的值valueObjectremove(Objectkey)删除并返回Map集合中指定键对应的元素voidclear()清空集合SetkeySet()返回Map集合中所有的键Collectionvalues()返回Map集合中所有的值SetMap.EntryentrySet()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任务8 系统存储结构优化教学课件 Java程序设计项目化教程 任务 系统 存储 结构 优化 教学 课件 Java 程序设计 项目 教程
限制150内