Java Collections API 您不知道的 件事【DOC精选】.doc

Java Collections API 您不知道的 件事【DOC精选】.doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对于很多 Java 开发人员来说,Java Collections API 是标准 Java 数组及其所有缺点的一个非常需要的替代品。将 Collections 主要与ArrayList?联系到一起本身没有错,但是对于那些有探索精神的人来说,这只是 Collections 的冰山一角。 虽然?Map(以及它的常用实现?HashMap)非常适合名-值对或键-值对,但是没有理由让自己局限于这些熟悉的工具。可以使用适当的 API,甚至适当的 Collection 来修正很多易错的代码。 之所以讨论 Collections,是因为这些集合在 Java 编程中是如此重要。首先我将讨论做每件事的最快(但也许不是最常见)的方式,例如将?Array?中的内容转移到?List。然后我们深入探讨一些较少人知道的东西,例如编写定制的 Collections 类和扩展 Java Collections API。 1. Collections 比数组好 刚接触 Java 技术的开发人员可能不知道,Java 语言最初包括数组,是为了应对上世纪 90 年代初期 C++ 开发人员对于性能方面的批评。从那时到现在,我们已经走过一段很长的路,如今,与 Java Collections 库相比,数组不再有性能优势。 例如,若要将数组的内容转储到一个字符串,需要迭代整个数组,然后将内容连接成一个?String;而 Collections 的实现都有一个可用的?toString()?实现。 除少数情况外,好的做法是尽快将遇到的任何数组转换成集合。于是问题来了,完成这种转换的最容易的方式是什么?事实证明,Java Collections API 使这种转换变得容易,如清单 1 所示: 清单 1. ArrayToList import java.util.*; public class ArrayToList { public static void main(String[] args) { // This gives us nothing good System.out.println(args); // Convert args to a List of String ListString argList = Arrays.asList(args); // Print them out System.out.println(argList); } } 注意,返回的?List?是不可修改的,所以如果尝试向其中添加新元素将抛出一个?UnsupportedOperationException。 而且,由于?Arrays.asList()?使用?varargs?参数表示添加到?List?的元素,所以还可以使用它轻松地用以?new?新建的对象创建?List。 2. 迭代的效率较低 将一个集合(特别是由数组转化而成的集合)的内容转移到另一个集合,或者从一个较大对象集合中移除一个较小对象集合,这些事情并不鲜见。 您也许很想对集合进行迭代,然后添加元素或移除找到的元素,但是不要这样做。 在此情况下,迭代有很大的缺点: 每次添加或移除元素后重新调整集合将非常低效。 每次在获取锁、执行操作和释放锁的过程中,都存在潜在的并发困境。 当添加或移除元素时,存取集合的其他线程会引起竞争条件。 可以通过使用?addAll?或?removeAll,传入包含要对其添加或移除元素的集合作为参数,来避免所有这些问题。 3. 用 for 循环遍历任何 Iterable Java 5 中加入 Java 语言的最大的便利功能之一,增强的 for 循环,消除了使用 Java 集合的最后一道障碍。 以前,开发人员必须手动获得一个?Iterator,使用?next()?获得?Iterator?指向的对象,并通过?hasNext()?检查是否还有更多可用对象。从 Java 5 开始,我们可以随意使用 for 循环的变种,它可以在幕后处理上述所有工作。 实际上,这个增强适用于实现?Iterable?接口的任何对象,而不仅仅是?Collections。 清单 2 显示通过?Iterator?提供?Person?对象的孩子列表的一种方法。 这里不是提供内部?List?的一个引用 (这使?Person?外的调用者可以为家庭增加孩子 — 而大多数父母并不希望如此),Person?类型实现?Iterable。这种方法还使得 for 循环可以遍历所有孩子。 清单 2. 增强的 for 循环:显示孩子 // Person.java

文档评论(0)

taotao0b + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档