欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    深入JavaJava集合学习教案.pptx

    • 资源ID:82692134       资源大小:4.34MB        全文页数:171页
    • 资源格式: PPTX        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    深入JavaJava集合学习教案.pptx

    会计学1深入深入(shnr)JavaJava集合集合第一页,共171页。n nJava集合类是一种特别有用(yu yn)的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈、队列等。除此之外java集合还可用于保存具有映射关系的关联数组。Java集合大致可分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java5中又增加了Queue体系集合,代表一种队列集合实现。第2页/共171页第三页,共171页。第一节第一节 Java集合集合(jh)概述概述pp为了保存数量不确定的数据,以及保存具有映射关系的数据(也称为关联素组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于(wiy)java.util包下,后来为了处理多线程环境下的并发安全问题,java5还在java.util.concurrent包下提供了一些多线程支持的集合类。pp集合类和数组不一样,数组元素既可以是基本数据类型,又可以是对象(实际上保存的是对象的引用变量);而集合只能保存对象。ppJava的集合类主要由两个接口派生而出:Collection和Map。第3页/共171页第四页,共171页。Collection接口接口(ji ku)及其派生及其派生类类第4页/共171页第五页,共171页。Map体系(tx)的继承树第5页/共171页第六页,共171页。第二节第二节 Collection和和Iteration接口接口(ji ku)n nCollectionCollection接口是接口是ListList、SetSet和和QueueQueue接口的父接口,该接口里定义的接口的父接口,该接口里定义的方法既可用于操作方法既可用于操作SetSet集合集合(jh)(jh),也可用于操作,也可用于操作ListList和和QueueQueue集合集合(jh)(jh)。CollectionCollection接口里定义了如下操作集合接口里定义了如下操作集合(jh)(jh)元素的方法。元素的方法。n nboolean add(Object o):boolean add(Object o):用于向集合用于向集合(jh)(jh)里添加一个元素,如果集合里添加一个元素,如果集合(jh)(jh)对对象被添加操作改变了,则返回象被添加操作改变了,则返回truetrue。n nboolean addAll(Collection c):boolean addAll(Collection c):该方法把集合该方法把集合(jh)c(jh)c里的所有元素添加到指定里的所有元素添加到指定集合集合(jh)(jh)里。如果集合里。如果集合(jh)(jh)对象被添加操作改变了,则返回对象被添加操作改变了,则返回truetrue。n nvoid clear():void clear():清除集合清除集合(jh)(jh)里所有元素,将集合里所有元素,将集合(jh)(jh)长度变为长度变为0 0;n nboolean contains(Object o):boolean contains(Object o):返回集合返回集合(jh)(jh)里是否包含指定元素。里是否包含指定元素。n nboolean containsAll(Collection c):boolean containsAll(Collection c):返回集合返回集合(jh)(jh)里是否包含集合里是否包含集合(jh)c(jh)c里所里所有元素。有元素。n nboolean isEmpty():boolean isEmpty():返回集合返回集合(jh)(jh)是否为空。当集合是否为空。当集合(jh)(jh)长度为长度为0 0时返回时返回truetrue。否则返回。否则返回falsefalse。第6页/共171页第七页,共171页。ppIterator iterator():Iterator iterator():返回一个返回一个IteratorIterator对象,用于遍历集合里的元素。对象,用于遍历集合里的元素。ppboolean remove(Object o):boolean remove(Object o):从此从此 collection collection 中移除指定元素的单个实例,存在多个中移除指定元素的单个实例,存在多个只删除第一个。只删除第一个。ppboolean removeAll(Collection c):boolean removeAll(Collection c):移除此移除此 collection collection 中那些也包含在指定中那些也包含在指定 c c中的所有中的所有元素元素,如果如果(rgu(rgu)删除了一个或一个以上,则返回删除了一个或一个以上,则返回truetrue。ppboolean retainAll(Collection c):boolean retainAll(Collection c):从集合中删除集合从集合中删除集合c c里不包含的元素(相当于把调里不包含的元素(相当于把调用该方法的集合变成该集合和集合用该方法的集合变成该集合和集合c c的交集),如果的交集),如果(rgu(rgu)该操作改变了调用该操作改变了调用该方法的集合,则该方法返回该方法的集合,则该方法返回truetrue。ppint size():int size():该方法返回集合里元素的个数。该方法返回集合里元素的个数。ppObject toArray():Object toArray():该方法把集合转换成一个数组,所有的集合元素变成对应的该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素。数组元素。第7页/共171页第八页,共171页。小练习(linx):因为所有的Collection 实现(shxin)类都重写了toString()方法,该方法可以一次性输出集合中所有元素。第8页/共171页第九页,共171页。n n上面程序中创建了两个Collection对象(duxing),一个是c集合,一个是books集合,其中c集合是ArrayList,而books集合是HashSet。虽然他们使用的实现类不同,但当把他们当成Collection来使用时,使用add,remove,clear等方法完全没有任何区别。第9页/共171页第十页,共171页。n n1.使用Lambda表达式遍历集合n njava8为Iterable接口新增了一个forEach(Consumer action)默认方法,该方法所需参数的类型是一个函数式接口,而Iterable接口是Collection接口的父接口,因此Collection集合也可以直接调用(dioyng)该方法。n n当程序调用(dioyng)Iterable的forEach(Consumer action)遍历集合元素时,程序会依次将集合元素传给Consumer的accept(T,t)方法(该接口中唯一的抽象方法)。正因为Consumer是函数式接口,因此可以使用Lambda表达式来遍历集合元素。第10页/共171页第十一页,共171页。n n2.使用foreach循环遍历(bin l)集合元素n n除了可以使用Iterator接口迭代访问Collection集合里的元素之外,使用Java5提供的foreach循环迭代访问集合元素更加便捷。n nCollection books=new HashSet();n nbooks.add(JavaEE);n nbooks.add(Android);n n/使用foreach循环来迭代访问Collection集合元素n nfor(Object obj:books)n nString book=(String)obj;n nSystem.out.println(book);第11页/共171页第十二页,共171页。n n3.使用Java8新增的Predicate操作集合n nJava8为Collection集合新增了一个removeIf(Predicate filter)方法,该方法见鬼批量删除符合filter条件的所有元素。该方法需要一个Predicate(谓词)对象作为(zuwi)参数,Predicate也是函数式接口,因此可是用Lambda表示式作为(zuwi)参数。第12页/共171页第十三页,共171页。n n4.使用Java8新增的Stream操作集合n nJava8还新增了Stream、InStream、LongStream、DoubleStream等流式API,这些API代表多个支持串行和并行聚集(jj)操作的元素。Stream是一个通用的流接口,而IntStream、LongStream、DoubleStream则代表元素类型为int、long、double的流。n nJava8还为上面每个流式API提供了对应的Builder,例如Stream.Builder,IntStream.Builder,LongBuilder,DoubleStream.Builder,开发者可以通过这些Builder来创建对应的流。第13页/共171页第十四页,共171页。n n独立使用Stream的步骤如下:n n使用Stream或XXXStream的builder()类方法创建(chungjin)Stream对应的Builder。n n重复调用Builder的add()方法向该流中添加多个元素。n n调用Builder的builder()方法获取该流中添加多个元素。n n调用Stream的聚集方法。第14页/共171页第十五页,共171页。n n实例:n n注意:IntStream的聚集(jj)方法只能执行一次。第15页/共171页第十六页,共171页。n nStream提供了大量的方法进行(jnxng)聚集操作,这些方法既可以是“中间的”(intermediate),也可以是“末端的”(terminal)。n n中间方法:中间操作允许流保持打开状态,并允许直接调用后续方法。上面程序中的map()方法就是中间方法。中间方法的返回值是另外一个流。n n末端方法:末端方法是对流的最终操作,当对某个Stream执行末端方法后,该流将会被“消耗”且不可再用。上面程序的sum(),count(),average()等就是末端第16页/共171页第十七页,共171页。n n流的方法还有如下两个特征:n n有状态的方法:这种方法会给流增加一些新的属性,比如元素的唯一性、元素的最大数量、保证元素以排序的方式被处理等。有状态的方法往往需要(xyo)更大的性能开销。n n短路方法:短路方法可以尽早结束对流的操作,不必检查所有的元素。第17页/共171页第十八页,共171页。n n介绍一下Stream常用的方法:n nfilter(Predicate predicate):过滤Stream中所有不符合predicate的元素。n nmapToXxx(ToXxxFunction mapper):使用ToXxxFunction对流(duli)中的元素执行一对一的转换。n npeek(Consumer action):依次对每个元素执行一些操作,该方法返回的流与原有流包含相同的元素。该方法主要用于调试。n ndistinct():该方法用于排序流中所有重复的元素(判断元素重复的标准是使用equals()比较返回true)。这是一个有状态的方法。第18页/共171页第十九页,共171页。ppsorted():该方法用于保证流中的元素在后续的访问中处于有序状态。这是一个有状态的方法。pplimit(long maxSize):该方法用于保证对该流的后续访问中最大允许(ynx)访问的元素个数。这是一个有状态的、短路的方法。第19页/共171页第二十页,共171页。n nStream常用的末端方法n nforEach(Consumer action):遍历流中所有元素,对每个元素执行action。n ntoArray():将流中所有元素转换为一个数组。n nreduce():该方法有三个重载的版本(bnbn),都用于通过某种操作来合并流中的元素。n nmin():返回流中所有元素的最小值。n nmax():返回流中所有元素的最大值。n ncount():返回流中所有元素的数量。第20页/共171页第二十一页,共171页。ppanyMatch(Predicate predicate):判断(pndun)流中是否至少包含一个元素符号符合Predicate条件。ppallMatch(Prediacate predicate):判断(pndun)流中是否每个元素都符合Predicate条件。ppnoneMatch(Predicate predicate):判断(pndun)流中是否所有元素都不符合Predicate条件。ppfindFirst():返回流中的第一个元素。ppfindAny():返回流中的任意一个元素。第21页/共171页第二十二页,共171页。n n除此之外,Java 8 允许使用流式API来操作集合,Collection接口提供了一个Stream()默认方法,该方法可返回该集合对应(duyng)的流,接下来计科通过流式API来操作集合元素。由于Stream可以对集合元素进行整体的聚集操作,因此Stream极大地丰富了集合的功能。第22页/共171页第二十三页,共171页。n n实例(shl):第23页/共171页第二十四页,共171页。第三节第三节 Set集合集合(jh)n nset集合类似一个罐子,程序可以一次把对象丢进set集合,而set集合通常不能记住元素的添加顺序。Set集合与Collection基本相同,没有提供任何额外的方法。实际上Set就是Collection,只是行为略有不同。n nset集合不允许包含相同元素,如果试图把两个相同的元素加入同一个Set集合中,则添加操作失败,add()方法返回(fnhu)false,且新元素不会被加入。n n上面介绍的是set集合的通用知识,因此完全适合后面介绍的HashSet、TreeSet和EnumSet三个实现类。只是三个实现类还各有特色。第24页/共171页第二十五页,共171页。1.HashSet类类n nHashSet是set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此据很好的存储和查找性能。n nHashSet具有以下特点:n n不能保证元素的排列顺序,顺序可能(knng)与添加顺序不同,顺序也有可能(knng)发生变化。n nHashSet不是同步的,如果多个线程同时访问一个HashSet,假设有两个或者两个以上线程同时修改了HashSet集合时,必须通过代码来保证其同步。n n集合元素值可以是null。第25页/共171页第二十六页,共171页。n n当向HashSet集合中存入一个(y)元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode()值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals()方法比较返回true,但它们的hasCode()方法返回值不同,HashSet将会把他们存储在不同的位置,依然可以添加成功。n n也就是说,HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法返回值也相等。第26页/共171页第二十七页,共171页。n n如果两个对象的hashCode()方法(fngf)返回的hasCode值相同,但他们通过equals()方法(fngf)比较返回false时更加麻烦:因为两个对象的hasCode()值相同,HashSet将试图把他们保存在同一个位置,但又不行(否则将只剩下一个对象),所以实际上会在这个位置用链式结构来保存多个对象;而HashSet访问集合元素时也是根据元素的hashCode值来快速定位的,如果HashSet中两个以上的元素具有相同的hashCode值,将会导致性能下降。第27页/共171页第二十八页,共171页。n n如果两个对象通过equals()方法返回true,但这两个对象的hashCode()返回不同的hasCode()值时,这将导致HashSet会把这两个对象保存在Hash表中的不同位置,从而使两个对象都可以添加成功,这就与Set集合的规则冲突了。n n如果需要把某个类的对象保存到HashSet集合中,重写这个类的equals()方法和hashCode()方法时,应该尽量保证两个对象通过equals()方法比较(bjio)返回true时,它们的hasCode()方法返回值也相同。第28页/共171页第二十九页,共171页。n nHashSet中每个能存储元素的“槽位”(slot)通常称为“桶”(bucket),如果有多个元素的hashCode值相同,但它们通过equals()方法比较返回(fnhu)false,就需要在一个“桶”里放多个元素,这样就会导致性能下降。第29页/共171页第三十页,共171页。重写重写hashCode()方法方法(fngf)的的基本规则基本规则pp在程序运行过程中,同一个对象多次调用hashCode()方法(fngf)应该返回相同的值。pp当两个对象通过equals()方法(fngf)返回true时,这两个对象的hashCode()方法(fngf)应该返回相同的值。pp对象中用作equals()方法(fngf)比较标准的实例变量,都应该用于计算hashCode第30页/共171页第三十一页,共171页。重写重写hashCode的一般的一般(ybn)步步骤骤n n1.把对象内每个有意义的实例变量(即每个参与equals()方法比较标准的实例变量)计算出一个(y)int类型的hasCode值。第31页/共171页第三十二页,共171页。hashCode的计算的计算(j sun)方式方式实例变量类型实例变量类型计算方式计算方式实例变量类型实例变量类型计算方式计算方式booleanhashCode=(f?0:1)floathashCode=Float.floatToIntBirs(f)整数类型(byte,short,char,int)hashCode=(int)fdoublelong1=Double.doubleToLongBits(f)hashCode=(int)(1(132);longhashCode=(int)(f(f32)引用类型hashCode=f.hashCode()第32页/共171页第三十三页,共171页。n n2.用第一步计算出来的多个hashCode值组合计算出一个hashCode值返回。n n例如:n nreturn f1.hashCode()+(int)f2;n n为了避免直接相加产生偶然相等(两个对象的f1,f2实例变量并不相等,但他们的hashCode的和恰好相等),可以通过为各实例变量的hashCode值乘以任意(rny)一个质数再相加。例如如下代码:n nreturn f1.hashCode()*19+(int)f2*31;第33页/共171页第三十四页,共171页。n n如果想HashSet中添加一个可变对象后,后面程序修改了该可变对象的实例变量(binling),则可能导致它与集合中的其他元素相同(即两个对象通过equals()方法比较返回true,两个对象的hashCode值也相等),这就有可能导致HashSet中包含两个相同的对象。第34页/共171页第三十五页,共171页。实例实例(shl)第35页/共171页第三十六页,共171页。n n由上面的例子可见,当程序把可变对象添加到HashSet中之后,尽量不要(byo)去修改该集合元素中参与计算hashCode()、equals()的实例变量,否则将会导致HashSet无法正确操作这些集合元素。第36页/共171页第三十七页,共171页。2.LinkedHashSet类类n nHashSet还有一个子类LinkedHashSet,LinkedHashSet集合也是根据(gnj)元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。也就是说,当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。n nLinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问的Set里的全部元素是有很好的性能,因为它以链表来维护内部顺序。第37页/共171页第三十八页,共171页。实例实例(shl)输入LinkedHashSet集合(jh)的元素时,元素的顺序总是与添加顺序一致。第38页/共171页第三十九页,共171页。3.TreeSet类类n nTreeSet是SortedSet接口的实现类,正如SortedSet名字所暗示的,TreeSet可以确保(qubo)集合元素处于排序状态。与HashSet集合相比,TreeSet还提供了几个额外的方法:n nComparator comparator():如果TreeSet采用了定制排序,则该方法返回定制排序所使用的Comparator();如果TreeSet采用了自然排序,则返回null。n nObject first():返回集合中的第一个元素。n nObject last():返回集合中的最后一个元素。第39页/共171页第四十页,共171页。ppObject lower(Object e):返回集合中位于指定元素(yun s)之前的元素(yun s)(即小于指定元素(yun s)的最大元素(yun s),参考元素(yun s)不需要是TreeSet集合里的元素(yun s))。ppObject higher(Object e):返回集合中为与指定元素(yun s)之后的元素(yun s)(即大于指定元素(yun s)的最小元素(yun s),参考元素(yun s)不需要是TreeSet集合里的元素(yun s))。ppSortedSet subSet(Object fromElement,Object toElement):返回此Set的子集合,范围从fromElement(包含)到toElement(不包含)。第40页/共171页第四十一页,共171页。ppSortedSet headSet(Object toElement):返回此Set的子集,由小于toElement的元素(yun s)组成。ppSortedSet tailSet(Object fromElement):返回此Set的子集,由大于或等于formElement的元素(yun s)组成。pp提示:表面上看起来这些方法很多,其实他们很简单:因为TreeSet中的元素(yun s)是有序的,所以增加了访问第一个,前一个,后一个,最后一个元素(yun s)的方法,并提供了三个从TreeSet中截取子TreeSet的方法。第41页/共171页第四十二页,共171页。练习练习(linx)第42页/共171页第四十三页,共171页。n n与HashSet集合采用Hash算法来决定元素的存储位置不同,TreeSet采用红黑树的数据结构来春初集合元素。那么TreeSet进行排序的规则是怎么样的呢?TreeSet支持两种排序方法(fngf):自然排序和定制排序。在默认情况下,TreeSet采用自然排序。第43页/共171页第四十四页,共171页。自然自然(zrn)排序排序n nTreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列,这种方法就是自然排序。n njava提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大小。当一个对象调用该方法与另一个对象进行比较时,例如(lr)pareTo(obj2),如果该方法返回0,则表明这两个对象相等;如果该方法返回一个正整数,则表明obj1obj2;如果该方法返回一个负整数,则表明obj1o2;如果该方法返回0,则表明01=02;如果该方法返回负整数,则表明o102;n n如果需要实现定制排序则需要在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。由于Comparator是一个函数(hnsh)式接口,因此,可以使用Lambda表达式来代替Comparator表达式。第58页/共171页第五十九页,共171页。实例实例(shl)n n从大到小排序(pi x):第59页/共171页第六十页,共171页。n n上面程序中粗体字部分使用了目标类型为Comparator的Lambda表达式,它负责tsSet集合的排序。所以当把M对象添加到ts集合中时,无须M类实现Comparator接口,因为此时(c sh)TreeSet无须通过M对象本身来比较大小,而是由与TreeSet关联的Lambda表达式负责集合元素的排序。第60页/共171页第六十一页,共171页。注意注意(zh y):n n当通过Comparator对象(或Lambda表达式)来实现TreeSet的定制排序时,依然不可以向TreeSet中添加类型不同的对象,否则会引发ClassCastException异常,使用定制排序时,TreeSet对集合元素排序不管集合元素本省的大小,而是由Comparator对象(或Lambda表达式)负责集合元素的排序规则。TreeSet判断(pndun)两个元素相等的标准是:通过Comparator(或Lambda表达式)比较连个元素返回了0,这样TreeSet不会把第二个元素添加到集合中。第61页/共171页第六十二页,共171页。4.EnumSet类类n nEnumSet是一个专为枚举类设计的集合类,EnumSet中的所有元素都必须是指定(zhdng)枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式的地指定(zhdng)。EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。n nEnumSet在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此EnumSet对象占用内存很小,而且运行效率很好。尤其是进行批量操作(如调用containsAll()和retainAll())时,如果其参数也是EnumSet集合,则该批量操作的执行速度也非常快。第62页/共171页第六十三页,共171页。n nEnumSet集合不允许加入null元素,如果试图插入null元素,EnumSet将抛出NullPointerException异常。如果只是想判断EnumSet是否包含NULL元素或试图删除null元素都不会抛出异常,只是删除操作将返回false,因为没有任何NULL元素被删除。n nEnumSet类没有暴露任何构造器来创建该类的实例,程序应该通过他提供(tgng)的类方法来创建EnumSet对象。第63页/共171页第六十四页,共171页。n nEnumSet类提供了如下常用的类方法来创建EnumSet对象。n nEnumSet allOf(Class elementType):创建一个包含指定枚举类里所有枚举值得EnumSet集合。n nEnumSet complementOf(EnumSet s):创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,新EnumSet集合包含原EnumSet集合所不包含的、此枚举类剩下(shn xi)的枚举值。n nEnumSet copyOf(Collection c):使用一个普通集合来创建EnumSet集合。第64页/共171页第六十五页,共171页。ppEnumSet copyOf(EnumSet s):创建一个与指定(zhdng)EnumSet具有相同元素类型、相同集合元素的EnumSet集合。ppEnumSet noneOf(Class elementType):创建一个元素类型为指定(zhdng)枚举类型的空EnumSet。ppEnumSet of(E first,E.rest):创建一个包含一个或多个枚举值的EnumSet集合,传入的多个枚举值必须属于同一个枚举类。ppEnumSet range(E from,E to):创建一个包含从from枚举值到to枚举值范围内所有枚举值的EnumSet集合。第65页/共171页第六十六页,共171页。实例实例(shl)第66页/共171页第六十七页,共171页。n n除了以上实例的方法,还可以(ky)复制另一个EnumSet集合中的所有元素来创建新的EnumSet集合,或者复制另一个Collection集合中的所有元素来创建新的EnumSet集合。当复制Collection集合中的所有元素来创建新的EnumSet集合是,要求Collection集合中的所有元素必须是同一个枚举类型的枚举值,否则就会发生ClassCastException异常。第67页/共171页第六十八页,共171页。实例实例(shl)第68页/共171页第六十九页,共171页。5.各各Set实现类的性能实现类的性能(xngnng)分析分析n nHashSet和TreeSet是Set的两个典型实现,到底如何选择(xunz)HashSet和TreeSet呢?HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保存排序的Set是,才应该使用TreeSet,否则都应该使用HashSet。n nHashSet还有一个子类:LinkedHashSet,但它只能保存同一个枚举类值作为集合元素。第69页/共171页第七十页,共171页。n n必须指出的是,set的三个实现类HashSet、TreeSet和EnumSet都是线程不安全的。如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,则必须手动保证该Set集合的同步性。通常可以通过Collection工具类的synchronizedSortedSet方法来“包装”该Set集合。此操作(cozu)最好在创建时进行,以防止对Set集合的意外非同步访问。例如:n nSortedSet s=Collections.synchronizedSortedSet(new TreeSet(.);第70页/共171页第七十一页,共171页。第四节第四节 List集合集合(jh)n nList集合代表一个元素有序、可重复(chngf)的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复(chngf)元素,可以通过索引来访问来访问指定的集合元素。List集合默认按元素的添加顺序设置元素的索引。第71页/共171页第七十二页,共171页。1.Java 8 改进改进(gijn)的的List接口和接口和ListIterator接口接口n nList作为Collection接口的子接口,当然可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法。n nvoid add(int index,Object element):将元素element插入(ch r)到List集合的index处。n nboolean addAll(int index,Collection c):将集合c所包含的所有元素都插入(ch r)到List集合的index处。n nObject get(int index):返回集合index索引处的元素。n nint indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。第72页/共171页第七十三页,共171页。ppint indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。ppint lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引。ppObject remove(int index):删除(shnch)并返回index索引处的元素。ppObject set(int index,Object element):将index索引处的元素替换成element对象,返回被替换的旧元素。ppList subList(int fromIndex,int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合。第73页/共171页第七十四页,共171页。n n除此之外,java8还为List接口添加了如下两个默认方法:n nvoid replaceAll(UnaryOperator operator):根据operator指定的计算规则重新(chngxn)设置List集合的所有元素。n nvoid sort(Comparator c):根据Comparator参数对List集合的元素排序。第74页/共171页第七十五页,共171页。List的基本的基本(jbn)用法用法第75页/共171页第七十六页,共171页。n n程序试图返回新字符串对象在List集合中的位置,实际上List集合中并未包含该字符串对象。因为List集合添加(tin ji)对象时通过new关键字创建的新字符串对象,两个对象显然不是同一对象,但List的indexOf方法依然可以饭后2。List判断两个对象相等的标志是什么呢?n nList判断两个对象相等只要通过equals()方法比较返回true即可。第76页/共171页第七十七页,共171页。实例实例(shl)equals()方法返回true,则表明(biomng)两个元素相等,就会把第一个元素删除。第77页/共171页第七十八页,共171页。注意注意(zh y)n n当调用List的set(int index,Object element)方法来改变(gibin)List集合指定索引处的元素时,指定的索引必须是List集合的有效索引。例如集合长度是4,就不能指定替换索引为4的元素-也就是说,set(int index,Object element)方法不会改变(gibin)List集合的长度。第78页/共171页第七十九页,共171页。sort()和和replaceAll()第79页/共171页第八十页,共171页。List的的listIterator()n n与Set只提供了一个Iterator()方法不同,List还额外提供了一个ListIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门(zhunmn)操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法。第80页/共171页第八十一页,共171页。ppboolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素。ppObject previous():返回该迭代器的上一个元素。ppvoid add(Object o):在指定位置插入一个元素。pp拿ListIterator与普通(ptng)的Iterator对比,不难发现ListIterator增加了向前迭代的功能(Iterator只能向后迭代),而且ListIt

    注意事项

    本文(深入JavaJava集合学习教案.pptx)为本站会员(一***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开