版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块六集合与泛型目录/Contents01List集合02泛型0304Map集合Stream流List集合任务一学习目标熟悉List集合的作用,能够简述List集合常用的方法以及常用实现类的特点
先定一个小目标!掌握ArrayList集合的使用,能够使用ArrayList实现数据的增删改查掌握LinkedList集合的使用,能够使用LinkedList实现数据的增删改查List集合简介List集合是一个有序集合,允许存储重复的元素。List集合中的元素按照插入的顺序进行存储,并且可以通过索引访问和操作其中的元素。List集合简介List集合不但继承了Collection集合中的全部方法,还提供了一些根据元素索引操作集合的特有方法。方法声明功能描述voidadd(intindex,Objectelement)将对象element插入List集合的index索引处booleanaddAll(intindex,Collectionc)将集合c中的所有元素插入到List集合的index索引处Objectget(intindex)返回集合中索引位置为index的元素Objectremove(int
index)删除集合中索引位置为index的元素Objectset(int
index,Object
element)将索引位置为index的元素替换成element对象,并将替换后的对象返回intindexOf(Object
o)返回对象o在List集合中第一次出现的索引位置intlastIndexOf(Object
o)返回对象o在List集合中最后一次出现的索引位置ListsubList(int
fromIndex,int
toIndex)返回从索引fromIndex(包括)到
toIndex(不包括)的所有元素组成的子集合ArrayList集合ArrayList集合是List集合的一个实现类,其内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。ArrayList具有数组的特点,即读取元素效率较高,插入和删除元素时,可能需要移动其他元素的位置,导致效率相对低一些。ArrayList集合ArrayList集合的构造方法。方法声明功能描述ArrayList()创建一个初始容量为10的空ArrayList对象ArrayList(intinitialCapacity)创建一个指定初始容量的空ArrayList对象ArrayList(Collection<?extendsE>c)创建一个包含指定Collection元素的ArrayList对象ArrayList集合ArrayList集合提供了三种构造方法。方法声明功能描述ArrayList()创建一个初始容量为10的空ArrayList集合ArrayList(intinitialCapacity)创建一个指定初始容量的空ArrayList集合ArrayList(Collection<?extendsE>c)创建一个包含指定Collection元素的ArrayList集合ArrayList集合通过一个案例演示ArrayList集合的基本操作。案例演示Example01.java源代码ArrayList集合案例的运行结果如下图所示。案例演示LinkedList集合ArrayList集合在查询元素时速度很快,但在增删元素时效率相对低一些。如果需要频繁向集合中插入和删除元素,可以使用List集合的另一个实现类LinkedList。LinkedList集合LinkedList底层结构:双向循环链表。链表中每个节点都通过引用的方式记录它前一个或后一个节点,从而将所有节点连接在一起。LinkedList集合插入和删除元素的过程如下图所示。LinkedList集合LinkedList集合除了包含从List集合继承过来的方法,还定义了一些自身特有的方法。方法声明功能描述voidaddFirst(Object
o)将指定元素o插入集合的开头voidaddLast(Object
o)将指定元素o添加到集合的结尾Object
getFirst()返回集合的第一个元素Object
getLast()返回集合的最后一个元素Object
removeFirst()移出并返回集合的第一个元素Object
removeLast()移出并返回集合的最后一个元素LinkedList集合下面通过一个案例演示LinkedList常用方法的使用。案例演示Example02.java源代码LinkedList集合案例的运行结果如下图所示。案例演示集合的遍历在开发中,对集合进行遍历是非常常见的操作。Java提供了一个接口Iterator,用于遍历Collection集合中的元素。同时,Java还提供了增强for循环,也称为for-each循环,增强for循环在遍历数组或者实现了Iterable接口的集合对象时非常方便,它会自动迭代集合中的每个元素,无须手动管理索引值。集合的遍历1.使用Iterator迭代器遍历集合使用Iterator迭代器访问集合中的元素的常用方法。方法声明功能描述booleanhasNext()判断集合中是否还有下一个元素可以访问Objectnext()返回集合中的下一个元素,并将迭代指针移到下一个位置voidremove()从集合中移除通过next()方法获取到的元素集合的遍历1.使用Iterator迭代器遍历集合下面通过一个案例演示如何使用Iterator接口的方法对集合进行遍历。Example03.java源代码集合的遍历1.使用Iterator迭代器遍历集合案例的运行结果如下图所示。集合的遍历1.使用Iterator迭代器遍历集合Iterator迭代器迭代元素的过程。集合的遍历脚下留心:并发修改异常在使用Iterator遍历集合时,如果在遍历过程中使用集合对象的remove()方法删除元素,会出现并发修改异常。这是Iterator用于检测并发修改的一种机制,当集合在遍历过程中发生结构性修改(例如添加元素,删除元素),迭代器的内部计数器发生变化,从而抛出并发修改异常(ConcurrentModificationException)。集合的遍历脚下留心:并发修改异常下面通过一个案例演示并发修改异常。Example04.java源代码集合的遍历脚下留心:并发修改异常案例的运行结果如下图所示。6.4集合的遍历脚下留心:并发修改异常如果想要安全地删除集合中的元素,可以使用Iterator接口提供的remove()方法,它会在删除元素后通知迭代器集合结构发生了改变,避免出现并发修改异常。下面把Example04.java文件中第13~15行代码修改为如下代码。int[]arr; //声明一个int[]类型的变量arr=newint[3]; //为arr分配3个数组元素的空间修改后再次运行案例,结果如右图所示。集合的遍历2.使用增强for循环遍历集合从JDK5开始,Java提供了增强for循环,简化了Iterator接口遍历的书写。在遍历集合时,增强for循环语法上是在编译时被转换成Iterator迭代器的while循环实现的,因此它适用于实现了Iterator接口的集合类。集合的遍历2.使用增强for循环遍历集合下面通过一个案例演示使用增强for循环遍历集合的方式。Example05.java源代码集合的遍历2.使用增强for循环遍历集合案例的运行效果如下图所示。任务小结本章主要对Java中常用集合类和泛型的相关知识进行了讲解。首先讲解了集合的基础知识以及Collection集合;其次讲解了List集合、集合的遍历、泛型;接着讲解了Set集合;然后讲解了Map集合。最后讲解了Stream流。通过学习本章内容,大家能够熟练运用不同集合类处理各种数据需求,并能够掌握泛型和Stream流的使用。任务小结目录/Contents01List集合02泛型0304Map集合Stream流泛型任务二学习目标掌握泛型的使用,能够使用泛型指定集合中元素的类型
先定一个小目标!泛型为了避免进行强制类型转换,同时提高类型的安全性,Java引入了“参数化类型(parameterizedtype)”的概念,也就是泛型。泛型就是指给类型指定一个参数,在使用时再指定此参数的具体值,这样一来就可以根据不同的需求操作不同类型的数据,使得代码更加灵活和可扩展。集合引入泛型之后,会在使用或者调用时传入具体的类型以确定最终的数据类型,所以集合需要存储什么类型的数据,在创建集合时传入对应的类型即可。泛型定义泛型时,类型参数由一对尖括号(<>)包含在中间。下面使用泛型优化文件Example06.java,将第5行代码修改为如下代码。List<Integer>list=newArrayList<>();上述代码指定了List集合中元素的类型为Integer,这样编译器在编译期就会做类型检查,从而限制List集合中只能存储Integer类型的元素。如果在集合中添加其他类型的元素,编译器会提示错误。如下图所示。泛型案例演示下面修改文件Example06.java,将List集合中原来的String类型的元素改为Integer类型,并在遍历List集合时将元素的类型由Object改为Integer。修改后的Example06.java源代码泛型案例演示修改后的案例运行结果如下图所示。泛型除了集合类等一些Java提供的类增加了泛型支持外,还可以根据需要自定义泛型类。例如,当一个类的行为和功能需要适用于多个不同类型的数据时,可以将这个类定义为泛型类。定义泛型类的语法格式如下:多学一招:自定义泛型类[修饰符]class类名<类型形参1,类型形参2,…,类型形参n>{//类的成员变量和成员方法}对上述语法格式的解释:(1)类名<类型形参>:是一个整体的数据类型,通常称为泛型类型。泛型多学一招:自定义泛型类(2)类型形参没有特定的意义,可以用任意一个大写字母表示,但是为了提高可读性,一般会使用有意义的字母表示。E:Element(元素),常在JavaCollection里使用,如List<E>,Iterator<E>,Set<E>。K,V:Key,Value(Map的键值对)。N:Number(数字)。T:Type(类型),如String,Integer等。在泛型类中,类型形参可以用于指定成员变量的类型,成员方法的形参类型,以及成员方法的返回值类型。泛型多学一招:自定义泛型类除了可以在类中使用泛型,还可以在接口和方法中使用泛型。声明泛型接口的语法格式与泛型类的类似,具体如下:声明泛型方法的格式如下:[修饰符]interface接口名<类型形参1,类型形参2,…,类型形参n>{}[修饰符]<类型形参1,类型形参2,…>返回值类型方法名称(类型形参1形参变量1,类型形参2形参变量2,…){}泛型多学一招:自定义泛型类在泛型类、泛型接口和泛型方法中,泛型类型一旦确定就不能更改。然而,在有些情况下需要指定可以操作的类型为某个类的父类或子类,这时候可以使用限定通配符来限制可操作类型的范围。Java中的限定通配符分为两种,具体如下所示。<?extendsT>,上界通配符。表示限定传入的类型必须为T类型或T类的子类型。<?superT>,下界通配符。表示限定传入的类型必须为T类型或T类的父类型。使用限定通配符后,泛型类型必须用限定内的类型来进行初始化,否则会编译错误。此外,Java中还提供了<?>表示非限定通配符,可以匹配任意类型,用于在泛型类、泛型接口和泛型方法中指定不确定的类型。【案例6-1】社团成员管理案例描述某校创立了一个书法社团,目前正在面向全校学生招募社团成员。本案例要求为该社团做一个社团成员的管理系统,实现对社团成员的添加、移除、修改和查询功能。社团成员管理的具体要求如下。系统首页:用于显示社团成员管理系统的所有功能,并根据用户的选择进行对应的操作。添加功能:添加成员时需要输入成员的编号、姓名、年龄和年级。每个成员的成员编号唯一,若添加的编号已被占用,则提示用户重新输入。【案例6-1】社团成员管理案例描述修改功能:修改功能只支持修改成员的年龄和年级两个信息。修改成员信息时需要输入成员的编号,若成员编号存在,则提示输入修改后的年龄和年级;否则提示成员编号不存在的相关提示。查询功能:查询功能支持查询所有成员和按年级查询某个年级的所有成员。按年级查询成员信息时需要输入指定的年级,若社团中存在该年级的成员,则显示查询到的成员信息;否则,提示社团中没有该年级的成员。移除功能:移除成员时需要输入成员的编号,若成员编号存在,则进行删除并提示删除成功;否则提示成员编号不存在的相关警告。【案例6-1】社团成员管理案例效果【案例6-1】社团成员管理案例效果任务小结本章主要对Java中常用集合类和泛型的相关知识进行了讲解。首先讲解了集合的基础知识以及Collection集合;其次讲解了List集合、集合的遍历、泛型;接着讲解了Set集合;然后讲解了Map集合。最后讲解了Stream流。通过学习本章内容,大家能够熟练运用不同集合类处理各种数据需求,并能够掌握泛型和Stream流的使用。任务小结Map集合任务三Map集合现实生活中,每个人都有唯一的身份证号,通过身份证号可以快速查找到这个人的信息,这两者是一对一的关系。在Java程序中,如果想要存储这种具有对应关系的数据,可以使用Map集合,Map集合常用的实现类有HashMap集合和TreeMap集合。学习目标掌握Map集合的作用,能够简述Map集合常用的方法以及常用实现类的特点
先定一个小目标!掌握HashMap集合的使用,能够使用HashMap实现数据的增删改查掌握TreeMap集合的使用,能够使用TreeMap实现数据的增删改查Map集合简介Map集合是Java中用于存储和操作键值对的数据结构,其中的每个元素都包含一个键对象key和一个值对象value,它们之间是一对一的映射关系。Map集合中的键不允许重复,而值可以重复。Map集合简介Map集合定义了很多双列集合通用的集合操作方法,包括添加、删除和判断元素等一些基本方法,还针对双列集合的特殊结构提供了基于键和值的获取方法。常用方法如下所示。方法声明功能描述Vput(Kkey,Vvalue)向Map集合中添加元素(键值对),如果当前Map集合中已有一个键值对中的键与key相等,则新的键值对会覆盖原来的键值对Vremove(Objectkey)从Map集合中删除键为key的键值对,并返回key对应的value;如果该key不存在,则返回nullvoidclear()移除Map集合中所有键值对元素booleancontainsKey(Objectkey)查询Map集合中是否包含指定key的键值对,如果包含则返回trueMap集合简介接上页表格。方法声明功能描述booleancontainsValue(Objectvalue)查询Map集合中是否包含指定value的键值对,如果包含则返回truebooleanisEmpty()判断Map集合是否为空intsize()返回集合中元素的数量Vget(Objectkey)返回Map集合中指定键所映射的值,V表示值的数据类型。如果不包含则返回nullSet<K>keySet()返回Map集合中所有键对象的Set集合Collection<V>values()返回Map集合中所有值对象组成的Collection集合Set<Map.Entry<K,V>>entrySet()返回Map集合中所有键值对的Set集合HashMap集合案例演示HashMap集合的底层结构与HashSet类似,也是采用哈希表来存储元素。HashMap集合中的大部方法都是Map集合方法的实现,下面先通过一个获取文具价格的案学习HashMap集合的使用。Example13.java源代码HashMap集合案例演示案例的运行结果如下图所示。HashMap集合在程序开发中,对于Map集合的遍历操作也是非常常见的需求,通常有以下两种遍历方式。第一种是先通过keySet()方法获取到Map集合中所有键的集合,再通过get()方法获取每个键所对应的值。第二种是将每个键值对看作一个对象,通过entrySet()方法获取Map集合中所有键值对对象的Set集合,再遍历Set集合。HashMap集合案例演示下面通过一个案例演示前面讲解的两种遍历Map集合的方式。Example14.java源代码HashMap集合案例演示案例的运行结果如下图所示。HashMap集合HashMap集合中元素的存取顺序不一致,如果想要元素的添加顺序和输出顺序一致,可以使用LinkedHashMap类,它是HashMap的一个子类,其原理与LinkedHashSet相同,通过在内部使用双向链表来维护元素的添加顺序。HashMap集合案例演示下面使用LinkedHashMap集合存储数据并进行遍历。Example15.java源代码HashMap集合案例演示案例的运行结果如下图所示。TreeMap集合TreeMap是Map集合的一个实现类,它的底层与TreeSet集合类似,采用平衡二叉树的结构存储数据,并通过二叉树的特性保证集合中键的唯一性。TreeMap集合同样可以依赖自然排序或者自定义排序对集合中的键进行排序。TreeMap集合案例演示下面通过一个案例来演示TreeMap集合的用法。案例要求在TreeMap集合中存储学生类对象为键,学生的班级为对应的值的键值对集合,学生对象包含姓名和成绩两个属性,要求遍历Map集合并根据成绩降序排序,其次根据姓名升序排序。首先定义学生类Student.java。Student.java源代码TreeMap集合案例演示下面定义测试类,将学生对象和学生的班级以键值对的方式存入TreeMap集合中。Example16.java源代码TreeMap集合案例演示案例的运行结果如下图所示。【案例6-3】英汉互译案例描述本案例要求编写一个程序,模拟英汉互译的操作。首先程序会初始化n组对应的中英文翻译数据,每个英文单词有1个或多个中文翻译,一个中文词语也可能有多个英文翻译。用户输入英文单词或中文词语后,程序输出该单词或词语所有对应的中文翻译或英文翻译,若未搜索到该单词或词语,则给出相应的提示。【案例6-3】英汉互译案例效果【案例6-4】益智棋牌游戏案例描述棋牌游戏相信许多人都玩过。本案例要求编写一个程序模拟棋牌游戏洗牌发牌的过程。该游戏使用一副54张的扑克牌,牌面由花色和数字(字母)组成,花色有四种,分别表示黑桃、红桃、方片和梅花,小☺和大☻分别表示小王和大王。该游戏共有3位玩家参与,首先将这54张牌的顺序打乱每人轮流摸一次牌,剩余3张留作底牌,然后在控制台打印3位玩家的牌和3张底牌。【案例6-4】益智棋牌游戏案例描述本案例中洗牌的步骤需要把54张牌的顺序打乱,可以使用一个方法shuffle(),它可以用来打乱集合中元素的顺序。该方法是在java.utils.Collections类中定义的,具体用法如下。上述方法的参数表示要打乱的集合,该方法没有返回值。打乱操作会在原始集合上进行。Collections.shuffle(Listlist);【案例6-4】益智棋牌游戏案例效果任务小结本章主要对Java中常用集合类和泛型的相关知识进行了讲解。首先讲解了集合的基础知识以及Collection集合;其次讲解了List集合、集合的遍历、泛型;接着讲解了Set集合;然后讲解了Map集合。最后讲解了Stream流。通过学习本章内容,大家能够熟练运用不同集合类处理各种数据需求,并能够掌握泛型和Stream流的使用。任务小结Stream流任务四学习目标熟悉Stream流的使用,能够使用Stream流对集合进行各种操作
先定一个小目标!Stream流Stream流又称StreamAPI,是JDK8开始提供的用于处理数据的API,它将待处理的数据视为流,在管道中传输。使用Stream流可以轻松地对数组和集合进行操作,简化集合和数组的遍历、筛选、过滤等操作。此外,Stream流的操作会产生结果,但不会修改数据源,这使得数据的处理更加安全可靠。Stream流使用Stream流处理集合一般需要经过三个步骤,分别是获取Stream流、使用中间方法对流进行处理、使用终结方法获取处理结果。下面对这三个步骤进行说明。Stream流1.获取Stream流获取Stream流指的是从数据源中获取Stream流的引用,让开发者能够对数据源进行流式处理。在Java中,对于所有的单列集合,Collection集合提供了一个stream()方法,用于获取对应集合的Stream流对象。对于Java中的双列集合,无法直接使用Stream流进行处理。但是可以通过keySet()方法或entrySet()方法将双列集合转为单列集合,然后调用stream()方法获取Stream流。Stream流2.Stream流的中间方法获取到集合的Stream流后,就可以对流中的数据进行操作了。Stream流提供了一系列方法,用于对数据流进行过滤、排序、去重等中间操作,这些方法被称为中间方法。中间方法是对Stream流中的元素执行处理操作的方法,不会立即返回最终的结果流,它们在终结方法被调用时才会执行。Stream流2.Stream流的中间方法Stream流常用的中间方法如下表所示。方法声明功能描述Stream<T>filter(Predicate<T>predicate)根据指定条件过滤流中的数据Stream<T>sorted()对流中元素进行升序排列Stream<T>sorted(Comparator<?superT>comparator)对流中元素按照指定规则进行排序Stream<T>limit(longmaxSize)截取流中前maxSize个元素Stream<T>skip(longn)跳过流中前n个元素,返回后面的元素Stream<T>distinct()去除流中重复的元素<R>Stream<R>map(Function<?superT,?extendsR>mapper)根据指定的映射函数对流中的数据进行转换,返回一个新的流static<T>Stream<T>concat(Streama,Streamb)合并a和b两个流为一个流Stream流2.Stream流的中间方法Stream流的每个中间方法都会返回一个新的Stream流,这样中间方法可以连续调用,形成操作链,对数据进行连续处理,也就是说,在一行代码中可以连续调用多个中间方法,以便一次性处理多个需求。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026春部编版(五四制)小学语文四年级下册第八单元习作《-的故事》写作指导+范文
- 一年级(上册)口算50题-可直接打印
- 植树节活动方案五篇
- 电梯维保方案三篇
- 方便食品罐头项目风险管理方案
- 大数据挖掘技术流程详解
- 大数据分析工具及流程优化
- 固收点评:长高转债特高压隔离开关国家电网主供商
- 2026年中医基础理论考试试题及答案
- 专利申请权转让协议书7篇
- 浙江国企招聘-2026年宁波舟山港股份有限公司招聘笔试备考题库附答案解析
- 汽轮机本体安装培训课件
- 彩钢圆弧棚施工方案
- 国企高管职位如何准备并应对高难度面试
- 2025年广东省高职院校五年一贯制转段考试文化课测试(数学)
- 老年人社区养老服务项目
- 2025年贵州三支一扶笔试真题及答案解析
- 营养风险筛查表(NRS2002)
- 2026春夏·淘宝天猫运动户外鞋服趋势白皮书
- 2025农业农村部在京事业单位招聘43人考试参考题库及答案解析
- 2025年金融数学专业题库- 高频交易的数学技术
评论
0/150
提交评论