已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于 Java 容器类学习心得体会 由于小编对 C+比较熟悉,所以学习 Java 应该重点体 会 Java 带来的新概念。本文基本上是 Java 标准库中集合 框架的基本概念,没有例子。写本文的目的在于方便小编 很长时间后若是忘了这些东西可以通过这片文章迅速回忆 起来。 整个 Java 容器类的基础是容器接口(例如 Collection,Map 等接口),而不是类。使用接口的最大好 处在于将容器的实现与容器的接口分开,这就意味着你可 以使用相同的方法访问容器而不用关心容器是由什么样的 数据结构实现的。同样,Iterator 接口也使得用户可以使 用相同的方法访问不同的容器类。以上这些是通用算法的 基础。China Collection 接口 Collection 接口有如下基本方法: boolean add(Object obj):如果添加对象后,集合确 实发生了变化,则返回 true;否则返回 false Iterator iterator():返回一个实现了 Iterator 接 口的对象 此外,还有 int size(),boolean isEmpty(),boolean contains(Object obj),void clear()等许多有用的方法 Map 接口 Map 用于存放关键字/值对。有如下基本方法: Object get(Object key) Object put(Object key,Object balue) Set keySet() Set entrySet() 此外,还有其他有用的方法。 需要注意的是,从表面看它似乎就是一种由键值对构 成的集合,但实际上并不是这样。不过另一方面假如将 Map 的某一部分看作集合,有时候也还是显得非常方便的。换 言之你可以创建一个集合用它来表达 Map 的那一部分。综 上所述,一个 Map 可以返回的东西包括它的键值构成的一 个 Set、由它的值构成的一个集合或者由它的键值对构成的 一个 Set。 Iterator 接口 Iterator 接口有下面 3 个基本方法: Object next():返回迭代器刚越过的元素的引用 boolean hasNext():判断容器内是否还有可供访问的 元素 void remove():删除迭代器刚越过的元素 注意:Java 中的迭代器与 STL 中的迭代器在概念上有 很重要的区别。在 STL 中,迭代器类似于数组的索引,使 用这种迭代器可以查看存放在该位置上的元素(类似于通过 数组索引 i 来访问 c 一样)。Java 中的迭代器并不这样运行。 查看与位置的变化紧密的结合在一起。每次通过 next()访 问一个元素的同时,迭代器的位置会自动向前走一步。 这个问题可以这样理解:Java 中的迭代器指向的位置 并不是元素,而是元素之间。这样,每次调用 next()时, 迭代器便越过下一个元素,同时返回它刚越过的那个元素 的引用。 根据上面的说明,很容易得出下面的代码是错误的: (); (); 而下面的代码是正确的: (); (); (); 迭代器的典型应用 Iterator it=(); while() Object obj=(); /do something with obj 子接口 List 接口 List 从 Collection 接口中分立出来是因为 List 的特 点有序的集合。这里指的有序并不是按照大小排好序 的(Sorted),而是指集合是可以以确定的顺序访问的序列。 针对 List 的这个特点,它比 Collection 接口增加了通过 索引进行操作的方法。例如,add、remove、get、set 等方 法的参数表中都可以加入索引的数值,从而操作处在索引 位置处的元素。 Set 接口 Set 与 List 的不同,它里面的元素是无序的;所以,不 能通过任何索引的方法来操作 Set 对象 China It Power . ComZKWED ListIterator 接口 使用与 List 的迭代器,比 Iterator 接口增加了一些 方法(例如 add()等)。此外,由于 List 是双向表,所以还 增加了 Object previous()和 boolean hasPrevious()方法, 用法与 next()和 hasNext()一样。China It Power . ComZKWED SortedMap 接口 包含如下基本方法: Comparator comparator() Object firstKey() Object lastKey()China It Power . ComZKWED 抽象容器类包括 AbstractCollection,AbstractList,AbstractSet 等等 China It Power . ComZKWED 为什么要有抽象结合类? 例如 Collection 接口中定义了许多有用的方法,如果 实现 Collection 接口的每个类都自行实现这么多的方法, 那将是非常麻烦的。为了使实现 Collection 接口的类的实 现更容易,AbstractCollection 类让一些基本方法(比如 add()和 iterator()变成了抽象的方法,而利用这些基本 方法的其他方法(例如 addAll()等等)则具体实现了。China It Power . ComZKWED ArrayList 与 LinkedList 都是实现了 List 接口的类,是有序集。List 接口支持 通过索引的方法来访问元素,对于这一点,ArrayList 没有 任何问题;但是对于 LinkedList 则有很大的问题,链表本 身不应该支持随机存储,但是作为 List 的一个实现,链表 也提供了对随机访问的支持,但是效率很低。每次通过索 引的方法都是进行一次遍历。我认为,其实就不应该让链 表支持随机访问;而 Java 这样实现我想是因为整个集合框 架的体系,使得链表与数组可以使用同样的方法使用。综 上所述,对于 LinkedList 最好不使用随机访问,而使用迭 代器。China It Power . ComZKWED TreeSet TreeSet 是 SortedSet 的一个实现。根据数据结构的 知识可以知道,树的效率非常高,而且 Java 标准库中有 TreeSet 这样的类,以后应该尽量使用 TreeSet 来提高程序 的效率。 需要注意的是:TreeSet 作为有序集,它通过 compareTo 或者 Comparator 来将集合元素排序。任何具有 相同比较值的元素(无论它们是否 equals(),在 TreeSet 中都作为同一个元素,从而不能有重复。这样以来,即使 是不同的对象也不能加入到集合中,这一点有时候很不方 便。我在编写 A*算法时,不同状态有时候对应着同一个启 发函数值,那么这些不同的状态就无法加入到 TreeSet 中。 China It Power . ComZKWED HashSet HashSet 是非常高效的数据结构,与 TreeSet 不同, HashSet 是比较对象的 equals()方法来区分不同的对象。 这样只有真正不同的对象才能不被重复的加入到集合中。 需要注意的是:HashSet 效率非常高,但是对象的 hashCode 函数不好确定。一般默认的对象的 hashCode 函数 是根据对象的内存地址得到的。好的 hashCode 函数是 HashSet 成功运用的关键。China It Power . ComZKWED 什么是视图? 对映象类使用 keySet()方法,仿佛该方法建立了一个 新的集合,并将影响的所有关键字都填入这个集合。实际 情况并非如此,对这个集合的任何操作都将反映到原始的 映象对象上。 实际上,keySet()返回的是一个实现 Set 接口的对象, 对该对象的操作就是对映象的操作。这样的集合成为视图。 视图的应用 将现有的容器变为线程安全的容器:使用 (Collection c)方法,在 SDK 文档中该方法的解释是 “Returns a synchronized (thread-safe) collection backed by the specified collection”。 将现有的容器变为只读的容器:使用(Collection c) 方法,在 SDK 文档中该方法的解释是“Returns an unmodifiable view of the specified collection.”。 子范围 Arrays 类中的 asList()方法 Chi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 景观照明工程一级建造师合同
- 石油化工投标异常事件应对策略
- 婚姻财产共同偿还承诺书
- 零售连锁预算管理规范
- 贸易余款偿还合同
- 电信塔楼加固改造合同
- 旅游景点特色客栈租赁合同
- 临时用车自驾车租赁协议
- 城市观光旅游车租赁合同
- 海口市冰场租赁合同
- 重组人白细胞介素2课件
- 人教版八年级上册英语全册教案(完整版)教学设计含教学反思
- 《保健按摩师》(五级)理论知识鉴定要素细目表
- 喷塑工艺介绍
- 公路工程工程量清单第100章解析及计量支付
- 消防设施巡查记录表
- 船员简历表 样本
- 妇科腹腔镜技术应急预案
- 室内燃气管道安装施工方案
- 安徽中电龙子湖工业园区12MW光伏发电示范项目二工区设备采购第一批35kV箱式变电站技术协议
- 冷冻结晶技术+膜过滤组合工艺处理硫酸钠废水的优越性
评论
0/150
提交评论