John Jiang

a cup of Java, cheers!
https://github.com/johnshajiang/blog

   :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 1 文章 :: 530 评论 :: 0 Trackbacks
使用Google Collections的理由
Google Collections终于发布了1.0版,本文是JavaLobby上的一篇博文,作者讲述了应该使用Google Collections的若干理由,大家有兴趣的话也可以体验一下。(2010.01.08最后更新)

在去年底看到Google Collections发布了它的1.0版之后,我想我应该看看与JDK默认提供的集合框架相比,使用Google Collections类库会有什么好处。Google Collections的发行包是一个zip文件,包含了一个jar文件,源文件和Javadoc文件。
Java Collections API就是被用来扩展的,而Google Collections则扩展的很好。很快,我就发现该类库最好的特性之一是它包含了MultiMap类。
为了证明这一点,让我们使用一个电话薄的例子,在这个例子中每个人都可一个或多个电话号码。事先,我已将电话号码存入每个人的一个单独的List中,如下所示:
Map<Person, List<PhoneNumber>> phoneBook = new HashMap<Person, List<PhoneNumber>>();

使用MultiMap,将变得十分简洁:
Multimap <Person, PhoneNumber> newPhoneBook = ArrayListMultimap.create();

且在使用MultiMap时,就没必要管理每个人的电话号码列表了。当我要加一个新的电话号码时,只需这么做:
Person me = new Person("James");
newPhoneBook.put(me, 
new PhoneNumber(111));
newPhoneBook.put(me, 
new PhoneNumber(201));

而不是使用以前的繁冗方法去管理ArrayList:
Person me = new Person("James");
if(phoneBook.get(me) == null)
{
   phoneBook.put(me, 
new ArrayList<PhoneNumber>());
}

phoneBook.get(me).add(new PhoneNumber(111));
对需要处理的数据进行管理这个话题,Precondition允许你对传入的参数进行校验。
Preconditions.checkNotNull(me);

我知道在Java中达到上述效果也可使用断言,但上述方法可使你的校验总是有效。你能方便地进行校验,通过判定一个表达式,也可为特定的参数抛出IllegalArgumentException。
Preconditions.checkArgument((i > 0), "The value i has to be greater than zero");

还有许多其它有用的特性,例如快速创建不可变集合的能力:
ImmutableList<Integer> numbers = ImmutableList.of(12358132134);

以前,你需要创建一个普通的List,然后再调用Collections.unmodifiableList()方法。
为了对该类库有一个很好的概览,查看由Kevin Bourrillion在2008年给出的一段视频
总之,该类库使你能以更优雅的方法来处理集合对象,并使你的代码更具可读性且更扼要。

posted on 2010-01-08 09:55 John Jiang 阅读(3557) 评论(4)  编辑  收藏 所属分类: JavaSEJava翻译

评论

# re: 使用Google Collections的理由(译) 2010-01-08 10:33 酷英在线词典
good....  回复  更多评论
  

# re: 使用Google Collections的理由(译) 2010-01-08 11:10 ycy
nice  回复  更多评论
  

# re: 使用Google Collections的理由(译) 2010-01-08 16:43 Lancelot
MultiMap这样的东西Commons早就有了。  回复  更多评论
  

# re: 使用Google Collections的理由(译) 2010-01-09 10:27 YangL
good job  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: