已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编写字符界面应用(中),ID:SCSJ001-JavaBasicSyntax,集合框架体系结构,2020/4/30,Java集合类(下),3,Collection接口,CollectionAPI提供“集合”的功能CollectionAPI包含下述接口Colection:将一组对象以集合元素的形式组织到一起,在其子接口中分别实现不同的组织方式Set:Collection的子接口,不记录元素的保存顺序,且不允许有重复元素List:Collection的子接口,记录元素的保存顺序,且允许有重复元素,2020/4/30,Java集合类(下),4,Collections(集合)API,一个collection(集合)是用一个对象来代表一组对象,其中的每个对象作为collection的一个元素。在CollectionAPI中,代表对象集合的接口有:Collection抽象的集合SetCollection的子接口,一个无序无重复集ListCollection的子接口,一个有序可重复集,2020/4/30,Java集合类(下),5,Collection层次结构,2020/4/30,Java集合类(下),6,数组列表ArrayList,在编程中常常会遇到需要动态操纵数组,比如在运行时增加和删除数组元素,而且有时在编译时又不想确定数组大小希望它可以动态伸缩,在java中解决这一问题的方法是使用java.util包中的ArrayList类ArrayList是List接口的一个可变长数组实现。,2020/4/30,Java集合类(下),7,数组列表ArrayList,publicintsize();/返回列表中的元素个数publicObjectget(intindex);/返回指定位置的元素publicvoidset(intindex,Objectobj);/设置指定位置元素publicvoidadd(Objectobj);/在列表末尾增加元素publicvoidadd(intindex,Objectobj);/在列表指定位置插入元素publicvoidclear();/删除列表中所有元素publicvoidremove(intindex);/删除列表中指定位置元素元素publicvoidcontains(Objectobj);/判断列表中指定对象是否存在,2020/4/30,Java集合类(下),8,ArrayList示例(ArrayListExample),publicclassArrayListExamplepublicstaticvoidmain(Stringargs)ArrayListal=newArrayList();/CreateanewArrayListfor(inti=0;i10;i+)al.add(newInteger(i);/AddItemstothearraylistfor(inti=0;ial.size();i+)System.out.println(i+=+al.get(i);al.remove(5);al.set(5,newInteger(66);for(Iteratori=al.iterator();i.hasNext();)Integerinteger=(Integer)i.next();System.out.println(integer);,2020/4/30,Java集合类(下),9,Set接口(例:SetTest),Set接口继承Collection接口,而且它不允许集合中存在重复项,每个具体的Set实现类依赖添加的对象的equals()方法来检查独一性。Set接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同。,2020/4/30,Java集合类(下),10,Set接口(例:SetTest),HashSeth=newHashSet();h.add(1st);h.add(2nd);h.add(newInteger(3);h.add(newDouble(4.0);h.add(2nd);/重复元素,未被加入h.add(newInteger(3);/重复元素,未被加入,2020/4/30,Java集合类(下),11,HashSet,HashSet扩展AbstractSet并且实现Set接口。它创建一个类集,该类集使用散列表进行存储。散列表通过使用称之为散列法的机制来存储信息。在散列(hashing)中,一个关键字的信息内容被用来确定唯一的一个值,称为散列码(hashcode)。而散列码被用来当做与关键字相连的数据的存储下标。关键字到其散列码的转换是自动执行的?你看不到散列码本身。你的程序代码也不能直接索引散列表。散列法的优点在于即使对于大的集合,它允许一些基本操作如add(),contains(),remove()和size()方法的运行,时间保持不变。,2020/4/30,Java集合类(下),12,HashSet,HashSet()构造一个默认的散列集合HashSet(Collectionc)用c中的元素初始化散列集合HashSet(intcapacity)用capacity初始化散列集合的容量HashSet(intcapacity,floatfillRatio)第四种形式用它的参数初始化散列集合的容量和填充比(也称为加载容量)。填充比必须介于0.0与1.0之间,它决定在散列集合向上调整大小之前,有多少能被充满。具体的说,就是当元素的个数大于散列集合容量乘以它的填充比时,散列集合被扩大。对于没有获得填充比的构造函数,默认使用0.75.,2020/4/30,Java集合类(下),13,HashSet(例:HashSetDemo),HashSet没有定义任何超过它的超类和接口提供的其他方法。重要的是,注意散列集合并没有确保其元素的顺序,因为散列法的处理通常不让自己参与创建排序集合。如果需要排序存储,另一种类集TreeSet将是一个更好的选择。下面是该程序的输出:A,F,E,D,C,B如上面解释的那样,元素并没有按顺序进行存储。,2020/4/30,Java集合类(下),14,Iterator接口,Iterator接口定义了对Collection类型对象中所含元素的遍历等增强处理功能可以通过Collection接口中定义的iterator()方法获得一个对应的Iterator(实现类)对象Set(实现类)对象对应的Iterator仍然是无序的List(实现类)对象对应的ListIterator对象可以实现对所含元素的双向遍历:使用next()方法和previous()方法,2020/4/30,Java集合类(下),15,Iterator接口层次,2020/4/30,Java集合类(下),16,Iterator接口,voidadd(Objectobj)将obj插入列表中的一个元素之后,该元素在下一次调用next()方法时,被返回booleanhasNext()如果存在更多的元素,则返回true,否则返回falseObjectnext()返回下一个元素。如果没有下一个元素,则引发NoSuchElementException异常voidremove()删除当前元素,如果试图在调用next()方法之后,调用remove()方法,则引发IllegalStateException异常,2020/4/30,Java集合类(下),17,Iterator接口,hasPrevious()如果存在前一个元素,则返回true;否则返回falseintnextIndex()返回下一个元素的下标,如果不存在下一个元素,则返回列表的大小Objectprevious()返回前一个元素,如果前一个元素不存在,则引发一个NoSuchElementException异常intpreviousIndex()返回前一个元素的下标,如果前一个元素不存在,则返回-1voidset(Objectobj)将obj赋给当前元素。这是上一次调用next()方法或previous()方法最后返回的元素,2020/4/30,Java集合类(下),18,Iterator接口(例:IteratorDemo),在通过迭代函数访问类集之前,必须得到一个迭代函数。每一个Collection类都提供一个iterator()函数,该函数返回一个对类集头的迭代函数。通过使用这个迭代函数对象,可以访问类集中的每一个元素,一次一个元素。通常,使用迭代函数循环通过类集的内容,步骤如下:,2020/4/30,Java集合类(下),19,Iterator接口(例:IteratorDemo),1.通过调用类集的iterator()方法获得对类集头的迭代函数。2.建立一个调用hasNext()方法的循环,只要hasNext()返回true,就进行循环迭代。3.在循环内部,通过调用next()方法来得到每一个元素。对于执行List的类集,也可以通过调用ListIterator来获得迭代函数。正如上面解释的那样,列表迭代函数提供了前向或后向访问类集的能力,并可让你修改元素。否则,ListIterator如同Iterator功能一样。,2020/4/30,Java集合类(下),20,Iterator接口,程序的输出如下所示:Originalcontentsofal:CAEBDFModifiedcontentsofal:C+A+E+B+D+F+Modifiedlistbackwards:F+D+B+E+A+C+特别值得注意的是:列表是如何被反向显示的。在列表被修改之后,litr指向列表的末端(记住,当到达列表末端时,litr.hasNext()方法返回false)。为了以反向遍历列表,程序继续使用litr,但这一次,程序检测它是否有前一个元素。只要它有前一个元素,该元素就被获得并被显示出来。,2020/4/30,Java集合类(下),21,映射(map),映射(map)是一个存储关键字和值的关联或者说是关键字/值对的对象。给定一个关键字,可以得到它的值。关键字和值都是对象。关键字必须是唯一的。但值是可以被复制的。有些映射可以接收null关键字和null值。而有的则不行。,2020/4/30,Java集合类(下),22,HashMap,HashMap类使用散列表实现Map接口。这允许一些基本操作如get()和put()的运行时间保持恒定,即便对大型集合,也是这样的。HashMap()构造一个默认的散列映射HashMap(Mapm)用m的元素初始化散列映射HashMap(intcapacity)将散列映射的容量初始化为capacityHashMap(intcapacity,floatfillRatio)用它的参数同时初始化散列映射的容量和填充比。容量和填充比的含义与前面介绍的HashSet中的容量和填充比相同。,2020/4/30,Java集合类(下),23,HashSet和HashMap,HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set。这里HashSet就是其实就是HashMap的一个视图。HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和Value两个值。往hashset中插入对象其实只不过是内部做了publicbooleanadd(Objecto)returnmap.put(o,PRESENT)=null;HashMap为散列映射,它是基于hashtable的一个实现,它可在常量时间内安插元素,或找出一组key-valuepair.HashSet为散列集,它把查找时间看的很重要,其中所有元素必须要有hashCode(),2020/4/30,Java集合类(下),24,HashTable与HashMap,HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。HashTable有一个contains(Objectvalue),功能和containsValue(Objectvalue)功能一样。HashTable使用Enumeration,HashMap使用Iterator。,2020/4/30,Java集合类(下),25,泛型编译类型,publicinterfaceSetextendsCollectionpublicinterfaceListextendsCollectionpublicclassArrayListextendsAbstractListimplementsList,RandomAccess,Cloneable,SerializablepublicinterfaceMappublicclassHashMapextendsAbstractMapimplementsMap,Cloneable,Serializable,2020/4/30,Java集合类(下),26,掌握重点,Jav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 30114.3-2014空间科学及其应用术语 第3部分:空间天文》
- 2026年广一模物理试题及答案
- 期中后质量分析会上校长讲话:清醒点!“课堂上最危险的不是学生说不会而是学生点头却没听懂”
- 深度解析(2026)《GBT 29794-2013静电复印(打印)设备用刮板》
- 深度解析(2026)《GBT 29672-2013化妆品中丙烯腈的测定 气相色谱-质谱法》
- 《GBT 7921-2008均匀色空间和色差公式》(2026年)合规红线与避坑实操手册
- 《GBT 591-2008船用法兰铸铁截止止回阀》(2026年)合规红线与避坑实操手册
- 2026年摄影工作室合作合同协议
- 麦肯锡中国医药创新某省市场机遇战略研究
- 2025北京铁二中高三(上)期中化学试题及答案
- 湖北省2026届高三(4月)调研模拟考试 英语答案
- 2026中国养老服务市场需求分析与商业模式研究报告
- 2026年丝绸博物馆陈列设计岗面试作品集准备
- 中国酒精使用障碍防治指南(2025版)
- 安全行车教课件
- 女性高管比例与企业碳排放之间的关系
- 储能设备安全知识
- 国家安全教育大学生读本课件
- 基于物联网的慢性病智能监护方案
- (14)普通高中音乐课程标准日常修订版(2017年版2025年修订)
- 长庆用人合同
评论
0/150
提交评论