快速业务通道

java api之实现(上) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
通用实现。实现的性能的描述使用词汇如 constant, log, linear, n log(n) 和 quadratic等。这些词汇指执行操作的关于时间复杂性(time complexity)的渐进上限(asymptotic upper bound)。 所有这些可够你消化的了,不过如果你不理解,也没太大关系。有兴趣的话可以阅读任意一本算法教科书,那上面有关于这类内容的解释。有一件事是应该牢记的,那就是:这种性能的度量有它的局限性。有时名义上较慢的实现对于你所实际使用大小的对象集来说可能要快。如果有些怀疑,估量一下该性能。

java api之实现(上)(2)

时间:2010-12-24

Set

两个通用Set实现是HashSet 和TreeSet。要决定用哪一个,那是非常简单明了的。 HashSet 要快得多 (对大多数操作是常数时间之于对数时间(constant time vs. log time)), 但不提供排序保证。如果你需要使用 SortedSet 中的操作,或者按顺序迭代对你来说是重要的,那么请使用 TreeSet。 否则,使用 HashSet。 在大多数时间都不使用 HashSet ,对你来说是个公平的赌博。

关于 HashSet,有一件事应该牢记,即就条目数和容量之和来讲,迭代是线性的。因此,如果迭代性能很重要,那就应该慎重选择一个适当的初始容量。容量选得太大,既浪费空间,也浪费时间。 默认的初试容量是101, 一般来讲,它比你所需要的要多。可以使用 int 构造函数来指定初始容量。要分配 HashSet 的初始容量为17:

Set s= new HashSet(17);

HashSets 另有一个称作 装载因数(load factor) 的"调整参数(tuning parameter)" 。如果你非常在乎你的 HashSet 的空间的使用,请阅读 HashSet 文本以获取详细信息。否则,就使用默认值吧。如果你接受默认装载因数,但你确实又想指定初始容量,那么,选一个大约是你期望你的 Set 将增长到的容量的两倍的数。如果你的猜测不着边,它也可以增长,或只是浪费一点空间。但都没有大问题。如果你知道有关正确尺寸的一个最佳值,用它吧;如果不知道,那就使用一个旧的值,或使用一个偶数值。它真的不是非常重要。这些事情只能使 HashSet 稍稍变好一点点。

TreeSet 没有调整参数。除 clone 之外,HashSet 和 TreeSet 都仅有那些由它们各自的接口所要求的操作 (Set 和 TreeSet),而没有任何别的操作。

List

两个通用List实现是ArrayList和LinkedList。 大部分情况下,你可能使用 ArrayList。 它提供常数时间定位存取,并且非常快。因为它不必为 List 中的每个元素分配一个节点对象,并且当它必须立即移动多个元素时,它可以利用本地方法 System.arraycopy 。 你可将 ArrayList 当作没有同步系统开销的 Vector 。

如果你经常添加元素至 List 的开始处,或在 List 上迭代以从其内部删除元素,你可能会考虑使用 LinkedList。这些操作在 LinkedList 中是常数时间,而在 ArrayList 中是线性时间。 但是你付出了很大的代价! 定位存取在 LinkedList 中是线性时间 ,而在 ArrayList 中是常数时间。 进一步讲,LinkedList 的常数因数是非常糟糕的。如果你想要使用一个 LinkedList, 用 LinkedList 和 ArrayList 二者去估量它的性能吧,你可能会有意外的收获。

ArrayList 有一个调整参数,即初始容量(initial capacity). 它是指 ArrayList 在增长前可容纳的元素的数量。关于这一点,没有许多要讲的。List 所不需要的仅有的 ArrayList 操作是 ensureCapacity 和 trimToSize (它改变了过剩的容量), 和 clone。

LinkedList 没有调整参数, 但有7个选项操作,其中一个就是clone,另外6个是 addFirst, getFirst, removeFirst, addLast, getLast, 和 removeLast。 对于它们,我的感觉是复杂的。它们使得将 LinkedList 作为一个队列或一个双端队列(dequeue)来使用这件工作变得简单, 但是它

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号