您的位置:软件首页 / 操作系统 / Google pk Apache:谁的集合库更酷

Google pk Apache:谁的集合库更酷

ZDNet 软件频道 更新时间:2008-01-09 作者: 海天一色 来源:IT168

本文关键词:Google Apache

集合是编程语言中的一个非常重要的特性,在Apache的Common程序集中为我们提供了一套更为强大的集合库。而最近火暴的Google也推出了自己的集合库,这套集合库不仅增强了我们感兴趣的功能,而且还使整个Java集合框架得到了空前的增强。

当我第一次使用Google的集合库时就有些困惑。这套Google集合库是为增加JDK的Java集合库框架而设计的,它的开发人员计划使这套库成为 JDK7的一部分。但在这之前,Apache组织已经在Common中加入了集合类库,正是由于这一点,使我不明白的是一向以创新精神著称的Google 为什么要做Apache已经做过的事。不过,最后我看了下关于对这套库的创始人的采访才了解Google的最终动机是为了使这套库提供对泛型的支持,而 Apache的这套集合库目前并不支持泛型,而且Apache的这套库还有一些类明显违反了Java集合框架的规范。

为了验证Apache的这套集库是否真的如Google所说的那样,我特意查看了一下Apache的这套库,结果发现它确实不支持JDK5的泛型功能(这是一个非常明显的缺陷),但在SourceForge网站上的确声称支持泛型。

至于那个违反Java集合框架规范的地方,我发现只有在Apache集合类中的Bag接口方法违反了这个规范,这是由于Bag接口本身的特性所决定的。如在Bag接口的add方法中,在Java集合框架的规范中规定add方法必须总是返回true,但当同类型的对象在Bag中存在时,add方法并不返回 true。在这种情况下,在这种情况下,它仅仅增加计数,并返回false。Apache集合类还有一个一致性问题,我发现这套库的源程序和二进制程序有些不一致,src文件夹已经有很长时间没有更新了。

基于以上的原因,我决定更深一步地研究Google的这套开源集合类库,并发现在其中更有价值的东西。在本文中首先描述了Google集合库的包和类(只是简单的提一下),然后会将Apache和Google的这两套集合类库进行一个比较,看看其中的差别。

Google的这套集合库共分为两个包:

1. com.google.common.base:这个包由一些常用的类组成,在些类甚至可以在没有Java集合框架来的情况下使用。
2. com.google.common.collect:这个包所提供的类将大大增强原有的Java集合框架。

下面分别介绍一下这两个包,并将其和Apache的集合库做一下比较:

一. The com.google.common.base Package

在这部分将讨论一下在com.google.common.base中的这个通用类包。如果我们直接使用过在Java集合框架包 java.lang.ref中的任何SoftReference、WeakReference或PlantomReference类,以及使用 ReferenceQueue写过代码,我们会为使用Google的这套库而兴奋不已。下面是Google的三个和java.lang.ref包对应的类:


1. FinalizablePhantomReference
2   FinalizableSoftReference
3. FinalizableWeakReference

上述的三个类扩展了它们各自在Java集合类中对应的类,这些都都可以处理ReferenceQueue,并回调在这些类中定义的 finalizeReferent()方法。因为如果当一个对象被垃圾回收器回收后,必须做一些清理工作时,finalizeReferent()方法将是最好的选择。

例如,假设我们正在使用ImageChunks类来将一个图象二进制数据保存在一个对象中,然后当JVM运行变得缓慢时,GC将清楚这个对象类型。我们可以试着继承这个FinalizableSoftReference类,然后覆盖FinalizeReferent方法。这个方法允许我们在GC清除对象时写一些清除操作的代码。FinalizableSoftReference的最大优势就是我们不需要直接处理 ReferenceQueue。

要注意的是,这个包并不能取代ReferenceQueue,因为它并不是为增强类而设计的。
[an error occurred while processing this directive]
技术关注
当前技术类目:
互联网软件本类技术关注比例:
3软件关注排行:31
5企业级技术关注度:5--

互联网软件技术相关文章:

文章类型收录数量
14 互联网软件的解决方案:
9 互联网软件的成功案例:

软件频道 Google 最新报道

软件频道 Apache 最新报道

爱卡汽车网 | CNET科技资讯网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | 开发者在线 | PChome | Solidot | SPN |
投影顾问网 | 万维家电网 | 网友世界 | 西域IT | ZDNet China | 中关村在线 | 中小企业成长网
CNET Networks
Copyright © 1997-2007 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号