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