深入JavaJava集合.pptx
《深入JavaJava集合.pptx》由会员分享,可在线阅读,更多相关《深入JavaJava集合.pptx(171页珍藏版)》请在咨信网上搜索。
1、Java集合集合Java集集合合类是是一一种种特特别有有用用的的工工具具类,可可用用于于存存储数数量量不不等等的的对象象,并并可可以以实现常常用用的的数数据据结构构,如如栈、队列列等等。除除此此之之外外java集集合合还可可用用于于保保存存具具有有映映射射关关系系的的关关联数数组。Java集集合合大大致致可可分分为Set、List、Queue和和Map四四种种体体系系,其其中中Set代代表表无无序序、不不可可重重复复的的集集合合;List代代表表有有序序、重重复复的的集集合合;而而Map则代代表表具具有有映映射射关关系系的的集集合合。Java5中中又又增增加加了了Queue体体系系集集合合,代
2、代表表一一种种队列集合列集合实现。第一第一节 Java集合概述集合概述p为了了保保存存数数量量不不确确定定的的数数据据,以以及及保保存存具具有有映映射射关关系系的的数数据据(也也称称为关关联素素组),Java提提供供了了集集合合类。集集合合类主主要要负责保保存存、盛盛装装其其他他数数据据,因因此此集集合合类也也被被称称为容容器器类。所所有有的的集集合合类都都位位于于java.util包包下下,后后来来为了了处理理多多线程程环境境下下的的并并发安安全全问题,java5还在在java.util.concurrent包包下下提提供供了了一一些些多多线程程支支持的集合持的集合类。p集集合合类和和数数组
3、不不一一样,数数组元元素素既既可可以以是是基基本本数数据据类型型,又又可可以以是是对象象(实际上上保保存存的的是是对象象的的引引用用变量);而集合只能保存量);而集合只能保存对象。象。pJava的的 集集 合合 类 主主 要要 由由 两两 个个 接接 口口 派派 生生 而而 出出:Collection和和Map。Collection接口及其接口及其派生派生类Map体系的继承树体系的继承树第二第二节 Collection和和Iteration接口接口Collection接接口口是是List、Set和和Queue接接口口的的父父接接口口,该接接口口里里定定义的的方方法法既既可可用用于于操操作作Se
4、t集集合合,也也可可用用于于操操作作List和和Queue集合。集合。Collection接口里定接口里定义了如下操作集合元素的方法。了如下操作集合元素的方法。pboolean add(Object o):用于向集合里添加一个元素,如果集合对象被添加操作改变了,则返回true。pboolean addAll(Collection c):该方法把集合c里的所有元素添加到指定集合里。如果集合对象被添加操作改变了,则返回true。pvoid clear():清除集合里所有元素,将集合长度变为0;pboolean contains(Object o):返回集合里是否包含指定元素。pboolean co
5、ntainsAll(Collection c):返回集合里是否包含集合c里所有元素。pboolean isEmpty():返回集合是否为空。当集合长度为0时返回true。否则返回false。pIterator iterator():返回一个Iterator对象,用于遍历集合里的元素。pboolean remove(Object o):从此 collection 中移除指定元素的单个实例,存在多个只删除第一个。pboolean removeAll(Collection c):移除此 collection 中那些也包含在指定 c中的所有元素,如果删除了一个或一个以上,则返回true。pboolea
6、n retainAll(Collection c):从集合中删除集合c里不包含的元素(相当于把调用该方法的集合变成该集合和集合c的交集),如果该操作改变了调用该方法的集合,则该方法返回true。pint size():该方法返回集合里元素的个数。pObject toArray():该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素。小练习:小练习:因为所有的因为所有的Collection实现类实现类都重写了都重写了toString()方法,该方方法,该方法可以一次性输出集合中所有法可以一次性输出集合中所有元素。元素。上上面面程程序序中中创建建了了两两个个Collection对象象,一
7、一个个是是c集集合合,一一个个是是books集集合合,其其中中c集集合合是是ArrayList,而而books集集合合是是HashSet。虽然然他他们使使用用的的实现类不不同同,但但 当当 把把 他他 们 当当 成成 Collection来来 使使 用用 时,使使 用用 add,remove,clear等方法完全没有任何区等方法完全没有任何区别。1.使用使用Lambda表达式遍表达式遍历集合集合java8为Iterable接接口口新新增增了了一一个个forEach(Consumer action)默默认方方法法,该方方法法所所需需参参数数的的类型型是是一一个个函函数数式式接接口口,而而Iter
8、able接接口口是是Collection接接口口的的父父接接口口,因此因此Collection集合也可以直接集合也可以直接调用用该方法。方法。当当程程序序调用用Iterable的的forEach(Consumer action)遍遍历集集合合元元素素时,程程序序会会依依次次将将集集合合元元素素传给Consumer的的accept(T,t)方方法法(该接接口口中中唯唯一一的的抽抽象象方方法法)。正正 因因 为 Consumer是是 函函 数数 式式 接接 口口,因因 此此 可可 以以 使使 用用Lambda表达式来遍表达式来遍历集合元素。集合元素。2.使用使用foreach循循环遍遍历集合元素集
9、合元素除除了了可可以以使使用用Iterator接接口口迭迭代代访问Collection集集合合里里的的元元素素之之外外,使使用用Java5提提供供的的foreach循循环迭迭代代访问集合元素更加便捷。集合元素更加便捷。Collection books=new HashSet();books.add(JavaEE);books.add(Android);/使用foreach循环来迭代访问Collection集合元素for(Object obj:books)String book=(String)obj;System.out.println(book);3.使用使用Java8新增的新增的Predi
10、cate操作集合操作集合Java8为Collection集集合合新新增增了了一一个个removeIf(Predicate filter)方方法法,该方方法法见鬼鬼批批量量删除除 符符 合合 filter条条 件件 的的 所所 有有 元元 素素。该 方方 法法 需需 要要 一一 个个Predicate(谓词)对象象作作为参参数数,Predicate也也是是函函数数式式接口,因此可是用接口,因此可是用Lambda表示式作表示式作为参数。参数。4.使用使用Java8新增的新增的Stream操作集合操作集合Java8还新新增增了了Stream、InStream、LongStream、DoubleStr
11、eam等等流流式式API,这些些API代代表表多多个个支支持持串串行行和和并并行行聚聚集集操操作作的的元元素素。Stream是是一一个个通通用用的的流流接接口口,而而IntStream、LongStream、DoubleStream则代代表元素表元素类型型为int、long、double的流。的流。Java8还为上上面面每每个个流流式式API提提供供了了对应的的Builder,例例如如Stream.Builder,IntStream.Builder,LongBuilder,DoubleStream.Builder,开开发者者可可以以通通过这些些Builder来来创建建对应的流。的流。独立使用独
12、立使用Stream的步的步骤如下:如下:使使用用Stream或或XXXStream的的builder()类方方法法创建建Stream对应的的Builder。重重复复调用用Builder的的add()方方法法向向该流流中中添添加加多多个个元素。元素。调用用Builder的的builder()方方法法获取取该流流中中添添加加多多个个元素。元素。调用用Stream的聚集方法。的聚集方法。实例:例:注意:注意:IntStream的聚集方法只能的聚集方法只能执行一次。行一次。Stream提提供供了了大大量量的的方方法法进行行聚聚集集操操作作,这些些方方法法既既可可以以是是“中中间的的”(intermed
13、iate),也也可可以以是是“末末端端的的”(terminal)。)。中中间方方法法:中中间操操作作允允许流流保保持持打打开开状状态,并并允允许直直接接调用用后后续方方法法。上上面面程程序序中中的的map()方方法法就就是是中中间方方法。中法。中间方法的返回方法的返回值是另外一个流。是另外一个流。末末端端方方法法:末末端端方方法法是是对流流的的最最终操操作作,当当对某某个个Stream执行行末末端端方方法法后后,该流流将将会会被被“消消耗耗”且且不不可可再用。上面程序的再用。上面程序的sum(),count(),average()等就是末端等就是末端流的方法流的方法还有如下两个特征:有如下两个
14、特征:有有状状态的的方方法法:这种种方方法法会会给流流增增加加一一些些新新的的属属性性,比比如如元元素素的的唯唯一一性性、元元素素的的最最大大数数量量、保保证元元素素以以排排序序的的方方式式被被处理理等等。有有状状态的的方方法法往往往往需需要要更更大大的性能开的性能开销。短短路路方方法法:短短路路方方法法可可以以尽尽早早结束束对流流的的操操作作,不不必必检查所有的元素。所有的元素。介介绍一下一下Stream常用的方法:常用的方法:pfilter(Predicate predicate):过滤Stream中中所所有有不不符符合合predicate的元素。的元素。pmapToXxx(ToXxxFu
15、nction mapper):使使用用ToXxxFunction对流中的元素流中的元素执行一行一对一的一的转换。ppeek(Consumer action):依依次次对每每个个元元素素执行行一一些些操操作作,该方方法法返返回回的的流流与与原原有有流流包包含含相相同同的的元元素素。该方法主要用于方法主要用于调试。pdistinct():该方方法法用用于于排排序序流流中中所所有有重重复复的的元元素素(判判断断元元素素重重复复的的标准准是是使使用用equals()比比较返返回回true)。)。这是一个有状是一个有状态的方法。的方法。psorted():该方方法法用用于于保保证流流中中的的元元素素在在
16、后后续的的访问中中处于有序状于有序状态。这是一个有状是一个有状态的方法。的方法。plimit(long maxSize):该方方法法用用于于保保证对该流流的的后后续访问中中最最大大允允许访问的的元元素素个个数数。这是是一一个个有有状状态的、短路的方法。的、短路的方法。Stream常用的末端方法常用的末端方法pforEach(Consumer action):遍遍历流流中中所所有有元元素素,对每个元素每个元素执行行action。ptoArray():将流中所有元素将流中所有元素转换为一个数一个数组。preduce():该方方法法有有三三个个重重载的的版版本本,都都用用于于通通过某某种操作来合并流
17、中的元素。种操作来合并流中的元素。pmin():返回流中所有元素的最小:返回流中所有元素的最小值。pmax():返回流中所有元素的最大:返回流中所有元素的最大值。pcount():返回流中所有元素的数量。返回流中所有元素的数量。panyMatch(Predicate predicate):判判断断流流中中是是否否至至少包含一个元素符号符合少包含一个元素符号符合Predicate条件。条件。pallMatch(Prediacate predicate):判判断断流流中中是是否否每每个个元素都符合元素都符合Predicate条件。条件。pnoneMatch(Predicate predicate)
18、:判判断断流流中中是是否否所所有元素都不符合有元素都不符合Predicate条件。条件。pfindFirst():返回流中的第一个元素。返回流中的第一个元素。pfindAny():返回流中的任意一个元素。返回流中的任意一个元素。除除此此之之外外,Java 8 允允许使使用用流流式式API来来操操作作集集合合,Collection接接口口提提供供了了一一个个Stream()默默认方方法法,该方方法法可可返返回回该集集合合对应的的流流,接接下下来来计科科通通过流流式式API来来操操作作集集合合元元素素。由由于于Stream可可以以对集集合合元元素素进行行整整体体的的聚集操作,因此聚集操作,因此St
19、ream极极大地丰富了集合的功能。大地丰富了集合的功能。实例:例:第三第三节 Set集合集合set集集合合类似似一一个个罐罐子子,程程序序可可以以一一次次把把对象象丢进set集集合合,而而set集集合合通通常常不不能能记住住元元素素的的添添加加顺序序。Set集集合合与与Collection基基本本相相同同,没没有有提提供供任任何何额外外的的方方法法。实际上上Set就是就是Collection,只是行,只是行为略有不同。略有不同。set集集合合不不允允许包包含含相相同同元元素素,如如果果试图把把两两个个相相同同的的元元素素加加入入同同一一个个Set集集合合中中,则添添加加操操作作失失败,add(
20、)方方法返回法返回false,且新元素不会被加入。,且新元素不会被加入。上上面面介介绍的的是是set集集合合的的通通用用知知识,因因此此完完全全适适合合后后面面介介绍的的HashSet、TreeSet和和EnumSet三三个个实现类。只只是三个是三个实现类还各有特色。各有特色。1.HashSet类HashSet是是set接接口口的的典典型型实现,大大多多数数时候候使使用用Set集集合合时就就是是使使用用这个个实现类。HashSet按按Hash算算法法来来存存储集合中的元素,因此据很好的存集合中的元素,因此据很好的存储和和查找性能。找性能。HashSet具有以下特点:具有以下特点:p不不能能保保
21、证元元素素的的排排列列顺序序,顺序序可可能能与与添添加加顺序序不不同同,顺序也有可能序也有可能发生生变化。化。pHashSet不不是是同同步步的的,如如果果多多个个线程程同同时访问一一个个HashSet,假假设有有两两个个或或者者两两个个以以上上线程程同同时修修改改了了HashSet集合集合时,必,必须通通过代代码来保来保证其同步。其同步。p集合元素集合元素值可以是可以是null。当当向向HashSet集集合合中中存存入入一一个个元元素素时,HashSet会会调用用该对象象的的hashCode()方方法法来来得得到到该对象象的的hashCode()值,然然后后根根据据该hashCode值决决定
22、定该对象象在在HashSet中中的的存存储位位置置。如如果果有有两两个个元元素素通通过equals()方方法法比比较返返 回回 true,但但 它它 们 的的 hasCode()方方 法法 返返 回回 值 不不 同同,HashSet将将会会把把他他们存存储在在不不同同的的位位置置,依依然然可可以以添添加加成功成功。也也就就是是说,HashSet集集合合判判断断两两个个元元素素相相等等的的标准准是是两两 个个 对 象象 通通 过 equals()方方 法法 比比 较 相相 等等,并并 且且 两两 个个 对 象象 的的 hashCode()方法返回方法返回值也相等。也相等。如如果果两两个个对象象的
23、的hashCode()方方法法返返回回的的hasCode值相相同同,但但他他们通通过equals()方方法法比比较返返回回false时更更加加麻麻烦:因因为两两个个对象象的的hasCode()值相相同同,HashSet将将试图把把他他们保保存存在在同同一一个个位位置置,但但又又不不行行(否否则将将只只剩剩下下一一个个对象象),所所以以实际上上会会在在这个个位位置置用用链式式结构构来来保保存存多多个个对象象;而而HashSet访问集集合合元元素素时也也是是根根据据元元素素的的hashCode值来来快快速速定定位位的的,如如果果HashSet中中两两个个以以上上的的元元素素具具有有相相同同的的ha
24、shCode值,将将会会导致致性性能能下下降。降。如如果果两两个个对象象通通过equals()方方法法返返回回true,但但这两两个个对象象的的hashCode()返返回回不不同同的的hasCode()值时,这将将导致致HashSet会会把把这两两个个对象象保保存存在在Hash表表中中的的不不同同位位置置,从从而而使使两两个个对象象都都可可以以添添加加成成功功,这就就与与Set集合的集合的规则冲突了。冲突了。如如果果需需要要把把某某个个类的的对象象保保存存到到HashSet集集合合中中,重重写写这个个类的的equals()方方法法和和hashCode()方方法法时,应该尽尽量量保保证两两个个对
25、象象通通过equals()方方法法比比较返返回回true时,它它们的的hasCode()方法返回方法返回值也相同。也相同。HashSet中中每每个个能能存存储元元素素的的“槽槽位位”(slot)通通常常 称称 为“桶桶”(bucket),如如 果果 有有 多多 个个 元元 素素 的的hashCode值相相同同,但但它它们通通过equals()方方法法比比较返返回回false,就就需需要要在在一一个个“桶桶”里里放放多多个个元元素素,这样就就会会导致性能下降。致性能下降。重写重写hashCode()方法的基本方法的基本规则p在在程程序序运运行行过程程中中,同同一一个个对象象多多次次调用用hash
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深入 JavaJava 集合
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。