Google pk Apache:谁的集合库更酷

上一篇 / 下一篇  2008-04-30 12:53:20

 集合是编程语言中的一个非常重要的特性,在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,因为它并不是为增强类而设计的。

TAG: apache google 集合库

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-05  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 6708
  • 日志数: 401
  • 建立时间: 2008-02-22
  • 更新时间: 2008-05-06

RSS订阅

Open Toolbar