




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaSE,第七讲,Java中的集合框架,概述,容器类类库的用途是持有对象,所有的容器都只能保存对Object的引用。Collection:一组独立的元素List:必须保持元素特定的顺序Set:不能有重复元素Map:一组成对的键值对(key-valuepair,keyandvalueareallobjects)对象。因此Map可以返回所有键(key)组成的Set,所有值(value)组成的Collection。,集合框架图,更多的时候我们只关心顶层的接口(interface)和具体的实现类(concreteclass),而且不再推荐使用遗留的类(如Vector、Hashtable等)。可以将上图简化为右图:,简化的集合框架图,容器中的对象都是Object,容器中只能容纳对象,不能容纳基本类型在将对象加入容器的时候就丢失了类型信息在使用容器中的元素前必须要做类型转换操作,JavaSE的自动装箱(Auto-boxing)与拆箱(Auto-unboxing),基本数据类型(primitivetype)与对应的包装类(wrapperclass)之间可以自动进行转换。注意关于null引用的拆箱和相等性“”的判断,容器中可以容纳基本类型,JavaSE增加了自动拆装箱的特性后,容器中就可以容纳基本类型了。把基本类型放入容器前自动装箱从容器中取基本类型前自动拆箱,JavaSE的泛型(Generictype),泛型支持定义带有类型参数(Parameterizedtype)的类,这些参数由您在实例化时指定。泛型为提高大型程序的类型安全和可维护性带来了很大的潜力。泛型在本质上是指参数化类型操作参数化类型的类,接口或者方法被称作泛型,如泛型类或泛型方法。,Point.java,限定容器中能持有的对象类型,JavaSE增加范性机制后,就可以限定容器中能持有的对象类型。对象放入容器后不会自动丢失类型信息从容器中取对象不需要转型类型安全,减少开发的复杂度,迭代器(Iterator),遍历并选择序列中的对象。客户端程序员不关心序列底层的结构。集合对象的iterator()方法要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。使用next()获得序列中的下一个元素。而且只能向下移动使用hasNext()检查序列中是否还有元素使用remove()将上一次返回的元素从迭代器中移除,List接口,次序是List最重要的特点;它保证维护元素特定的顺序。ArrayList,由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。LinkedList,对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。,TestLinkedList.java,TestArrayList.java,Set接口,存入Set的每个元素都必须是唯一的。因为Set不保存重复元素,加入Set的元素必须定义equals()方法以确保对象的唯一性。Set接口不保证维护元素的次序。HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()重载equals()方法时永远要重载hashCode()方法。否则的话会导致类与所有基于散列的集合一起使用时不能正常工作,这些集合包括HashSet、HashMap和Hashtable。,Set接口,java.lang.Object规范的约定如果在应用程序执行期间,用于对象的equals()方法中的信息不被修改,那么对同一对象的多次调用,hashCode()方法总是返回相同的整数。这个整数不要求在同一应用程序的不同执行间保持一致。如果两个对象按照equals()方法是相同的,那么对这两个对象的任一个调用hashCode()方法,必须要产生同样的整数结果如果两个对象根据equals()方法不相同,那么对这两个对象中的任一个对象调用hashCode()方法,不要求产生两个不同的整数结果。但是,为不相等的对象产生不同的整数结果可以提高hash表的性能。,PhoneNumber.java,Set接口,LinkedHashSet:具有HashSet的查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。SortedSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。TreeSet是接口SortedSet的唯一实现类,SortedSet的意思是“按比较函数对元素排序”,而不是指“元素插入的次序”。插入到SortedSet中的元素必须实现java.lang.Comparable接口(或者能够被一个特定的Comporator接受);并且所有的元素必须必须可以相互比较,否则会抛出ClassCastException。强烈建议compareTo()方法的相等测试与equals()方法有同样的结果。,TestSortedSet.java,PhoneNumber2.java,Map接口,ArrayList使用数字从对象序列中选择元素,因此它在数字与对象之间建立了关联。Map维护“键值对”的关联性,使你可以通过“键”查找“值”。LinkedHashMap:类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时反而更快,因为它使用链表维护内部次序。SortedMap:确保“键值对”中的“键”处于排序状态,其中TreeMap是其唯一实现。,TestLinkedHashMap.java,HashMap&Hashtable,HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口,主要区别在于:HashMap允许空(null)键值(key),而Hashtable不允许。HashMap由于非线程安全,效率上要高于Hashtable。HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。,TestHashMap.java,HashMap&Hashtable,Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map接口的一个实现。最大的不同是Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。,ArrayList&Vector,ArrayList与Vector都是使用数组方式存储数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025重症医学同步习题及答案
- 2025年急诊门诊急救物品、药品、器材管理制度试题及答案
- 2025年十八项医疗核心制度试题及参考答案
- 湖北省实验动物专业技术考试题库附参考答案
- 殡葬法律法规知识考试题及答案
- 国开大学(中央电大)行政管理本科《西方行政学说》考试试题及答案
- 车运输课件教学课件
- 天上的街市教学设计课件
- 相似联想作文教学课件
- 车辆盲区课件
- 2025年四川省高考化学试卷真题(含答案解析)
- 教育测量与评价 课件全套 朱德全 第1-15章 教育测量与评价概述- 教育测评结果的统计处理
- 2025年中海油招聘笔试参考题库附带答案详解
- GB/T 31989-2015高压电力用户用电安全
- GB/T 24338.6-2018轨道交通电磁兼容第5部分:地面供电设备和系统的发射与抗扰度
- 幼儿园中层干部培训心得体会
- 燃料电池课件
- 学校学生评教表
- 《风力机理论与设计》全套教学课件
- 小学书法练习指导四年级上册教学设计(苏少版)
- 丽声北极星自然拼读绘本第六级 The Clever Beaver 课件
评论
0/150
提交评论