技术开发 频道

Google pk Apache:谁的集合库更酷



【IT168 专稿】

集合是编程语言中的一个非常重要的特性,在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的集合库做一下比较:
0
相关文章