这是今天翻到的IBM DeveloperWorks网站上的Java特色专栏——驯服Tiger系列文章的阅读摘要。Tiger 是 Java SE 5 的代号,于2005年正式发布,到现在已经8年多了,所以对我来说是在补课,把以前落下的Java特性一一补回来。首先是集合框架部分,原文地址见本文最后部分。

Java平台有一个非常明显的特点,它会把接口和实现进行分离,这是一种非常好的开发原则:面向接口编程,而不是面向实现。集合框架是这个原则的典型表现,它本身分为3个部分:接口、实现和算法。比如使用List,我们关注的是List接口,而不是它的具体实现,实现是交给具体的代码来选择的,一般会使用ArrayList,有时也可能会使用 LinkedList。而算法是交给 Collections 类来提供的,它提供了诸如排序、查找这样的复杂算法,同时也提供了许多辅助方法,这些方法都是静态的。

接口在定义好后,是很少改变的,如果要改变,也尽量通过定义子接口来进行扩展,而不是修改原接口,这是OCP原则。另外一些扩展的工具方法,都尽量加到算法类中,Tiger 就是这么做的:

“Tiger 为所有数组添加了 hashCode()toString() 方法,还添加了特定于 Object 数组的deepEquals()deepHashCode()deepToString() 方法。总计有 21 个新方法可用。”

我用过 Arrays.toString() 方法,可以把数组直接转换成字符串形式(如[a,b,c]),用起来还是挺方便的,不过我不知道的是这个方法是 JDK 1.5 才开始提供的。

另外 Collections 类也在JDK5中作了扩展,增加了13个方法:

  • checkedCollection()
  • checkedSet()
  • checkedSortedSet()
  • checkedList()
  • checkedMap()
  • checkedSortedMap()
  • emptySet()
  • emptyList()
  • emptyMap()
  • reverseOrder()
  • frequency()
  • disjoint()
  • addAll()
  • 其中 checked 开头的方法是为你创建的集合对象提供运行时的安全检查,这样就不怕添加错误类型的元素了。empty 开头的方法用来返回空的不可改变的集合。

最后是一个接口:Queue。它是 Collection 的子接口,这似乎并不是一个好的设计。除了 LinkedList 实现了这个接口,其他的实现很多都在 java.util.concurrent 包中——例如 PriorityQueue 类。作为一种“先进先出”的数据结构,用来做并发操作还是挺合适的。

参考文章:http://www.ibm.com/developerworks/cn/java/j-tiger07195/