集合框架和泛型(一)
线上线下 平台预习
本课目标 学完本次课程后,你能够: 了解Java集合框架体系结构 会使用ArrayList存取数据 会使用LinkedList存取数据 要求强调会干什么、能干什么。在目标的重点、难点右侧,插入“重点”、“难点”图片,以引起学员重视。 6 / 38
存储一个班学员信息,假定一个班容纳20名学员 为什么使用集合框架 存储一个班学员信息,假定一个班容纳20名学员 学员1 学员20 一维数组 每天的新闻总数不确定,太少浪费空间,太多空间不足 如何存储每天的新闻信息? 问题 新闻1 …… 新闻N 如何存储课工场课程的代码与课程信息,能够通过代码方便地获得课程信息? 问题 代码1 …… 代码N 一一对应 课程1 …… 课程N 如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架 7 / 38
Java集合框架包含的内容2-1 Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中 接口 具体类 算法 Collection Map List Set ArrayList LinkedList HashSet TreeSet HashMap TreeMap 2 具体类 提供了对集合进行排序、 遍历等多种算法实现 Collections 算法 3 8 / 38
List 接口存储一组不唯一,有序(插入顺序)的对象 Java集合框架包含的内容2-2 Collection Collection 接口存储一组 不唯一,无序的对象 List 接口存储一组不唯一,有序(插入顺序)的对象 Set 接口存储一组唯一,无序的对象 Map接口存储一组键值对象,提供key到value的映射 List Set 教学指导: 要说明Map的key和value的特点,key是以Set存储的 9 / 38 6
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高 LinkedList采用链表存储方式,插入、删除元素时效率比较高 ArrayList LinkedList 10/ 38
演示示例1:ArrayList获取并打印新闻标题 问题 新闻管理系统,需求如下 可以存储各类新闻标题(包含ID、名称、创建者) 可以获取新闻标题的总数 可以逐条打印每条新闻标题的名称 元素个数不确定 使用集合类 存储方式如何选择? 分析 需要遍历元素 类型:新闻标题 存储对象如何确定? 属性:ID、名称、创建者 演示示例1:ArrayList获取并打印新闻标题 11 / 38
ArrayList集合类2-2 确定存储方式 确定存储对象 具体实现 ArrayList类是List接口的一个具体实现类 随机访问和遍历元素时,它提供更好的性能 确定存储对象 创建类型:新闻标题 包含属性: ID、名称、创建者 具体实现 …… 12 / 38
Collection接口常用通用方法还有:clear()、isEmpty()、iterator()、toArray() ArrayList常用方法 方法名 说明 boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始 void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 int size() 返回列表中的元素个数 Object get(int index) 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 boolean contains(Object o) 判断列表中是否存在指定元素 boolean remove(Object o) 从列表中删除元素 Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始 红色字体方法为Collection接口常用通用方法,即List和Set都适用 Collection接口常用通用方法还有:clear()、isEmpty()、iterator()、toArray() 13 / 38
演示示例2:LinkedList添加和删除新闻标题 问题 新闻管理系统,需求如下 可以添加头条新闻标题 获取头条和最末条新闻标题 可以删除末条新闻标题 元素个数不确定 使用集合类 分析 存储方式如何选择? 需要在列表的头或尾添加、删除元素 演示示例2:LinkedList添加和删除新闻标题 15/ 38
LinkedList集合类2-1 确定存储方式 具体实现 LinkedList类是List接口的一个具体实现类 插入或者删除元素时,它提供更好的性能 具体实现 …… 16 / 38
ArrayList与LinkedList 方法名 说明 void addFirst(Object o) 在列表的首部添加元素 void addLast(Object o) 在列表的末尾添加元素 Object getFirst() 返回列表中的第一个元素 Object getLast() 返回列表中的最后一个元素 Object removeFirst() 删除并返回列表中的第一个元素 Object removeLast() 删除并返回列表中的最后一个元素 ArrayList与LinkedList 17/ 38
ArrayList和LinkedList有何异同? 小结 Java集合框架中包含哪些接口和类? ArrayList和LinkedList有何异同? 提问 19/ 38
Set接口3-1 Set接口存储一组唯一,无序的对象 HashSet是Set接口常用的实现类 Set中存放对象的引用 Set set=new HashSet(); String s1=new String("java"); String s2=s1; String s3=new String("JAVA"); set.add(s1); set.add(s2); set.add(s3); System.out.println(set.size()); 【动画】 1、根据配音显示文字内容 【说辞】 接下来我们要讲解Collection接口的另外一个常用子接口——Set接口, 前面我们讲过了。 Set接口描述的是一种比较简单的一种集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象 HashSet是Set接口的常用实现类。而Set接口继承了Collection接口,同时没有添加新的方法,所以在使用上与List接口的实现类使用方式一致。【动画:代码出现】 都是有增加元素的add方法和获取元素个数的size方法。所以只需要进行类的替换就可以了。在这里就不做重复讲解了。 但是要注意的是Set接口不存在get方法,也就是没有List接口中通过索引取值的方法。 没有get方法?可能有同学就想了没有get方法Set集合要怎么遍历输出呢? 是呀。List接口是使用for循环通过get方法取出每个对象的方式遍历输出整个集合,Set接口没有get方法要怎么输出呢? 它是通过java集合框架中一个叫迭代器的接口实现遍历输出的。下面我们就来了解一下这个迭代器接口——Iterator接口 2 演示示例3:Set接口的一般用法 20 / 38
Set接口如何判断加入对象是否已经存在呢? 采用对象的equals()方法比较两个对象是否相等 问题 Set set=new HashSet(); String s1=new String("java"); String s2=s1; String s3=new String ("java"); set.add(s1); set.add(s2); set.add(s3); System.out.println(set.size()); 1 【动画】 1、根据配音显示文字内容 【说辞】 接下来我们要讲解Collection接口的另外一个常用子接口——Set接口, 前面我们讲过了。 Set接口描述的是一种比较简单的一种集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象 HashSet是Set接口的常用实现类。而Set接口继承了Collection接口,同时没有添加新的方法,所以在使用上与List接口的实现类使用方式一致。【动画:代码出现】 都是有增加元素的add方法和获取元素个数的size方法。所以只需要进行类的替换就可以了。在这里就不做重复讲解了。 但是要注意的是Set接口不存在get方法,也就是没有List接口中通过索引取值的方法。 没有get方法?可能有同学就想了没有get方法Set集合要怎么遍历输出呢? 是呀。List接口是使用for循环通过get方法取出每个对象的方式遍历输出整个集合,Set接口没有get方法要怎么输出呢? 它是通过java集合框架中一个叫迭代器的接口实现遍历输出的。下面我们就来了解一下这个迭代器接口——Iterator接口 21/ 38
Set接口3-3 HashSet是Set接口常用的实现类 Set接口不存在get()方法 Set newsTitleSet = new HashSet(); NewTitle car = new NewTitle(1, "汽车", "管理员"); //增加元素 newsTitleSet.add(car); //获取元素个数 System.out.println("新闻标题数目为:" + newsTitleList.size() + "条"); newsTitleSet.get(0); why?如何实现元素输出呢? 【动画】 1、根据配音显示文字内容 【说辞】 接下来我们要讲解Collection接口的另外一个常用子接口——Set接口, 前面我们讲过了。 Set接口描述的是一种比较简单的一种集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象 HashSet是Set接口的常用实现类。而Set接口继承了Collection接口,同时没有添加新的方法,所以在使用上与List接口的实现类使用方式一致。【动画:代码出现】 都是有增加元素的add方法和获取元素个数的size方法。所以只需要进行类的替换就可以了。在这里就不做重复讲解了。 但是要注意的是Set接口不存在get方法,也就是没有List接口中通过索引取值的方法。 没有get方法?可能有同学就想了没有get方法Set集合要怎么遍历输出呢? 是呀。List接口是使用for循环通过get方法取出每个对象的方式遍历输出整个集合,Set接口没有get方法要怎么输出呢? 它是通过java集合框架中一个叫迭代器的接口实现遍历输出的。下面我们就来了解一下这个迭代器接口——Iterator接口 22 / 38
演示示例4:使用Iterator和增强型for循环遍历Set 问题 如何遍历Set集合呢? 方法1:通过迭代器Iterator实现遍历 获取Iterator :Collection 接口的iterator()方法 Iterator的方法 boolean hasNext(): 判断是否存在另一个可访问的元素 Object next(): 返回要访问的下一个元素 方法2:增强型for循环 教学指导: 说明所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历。 分析 演示示例4:使用Iterator和增强型for循环遍历Set 23/ 38
Collection 、List 、Set 、Map接口的联系和区别 ArrayList和LinkedList的异同之处及各自的应用场合 总结 Collection 、List 、Set 、Map接口的联系和区别 ArrayList和LinkedList的异同之处及各自的应用场合 遍历集合的方法 泛型集合用法及好处 36 / 38
问题及作业 集中问题&课后作业
扫我有更多精彩课程呦