Collections API定制实现(一)

豆豆网   技术应用频道   2006年11月23日    社区交流

本文详细介绍Collections API定制实现(一)

  高性能、通用的(High-performance, General-purpose): 设计 对象集 架构 的工程师试图为每一 涌诙继峁┳詈玫耐ㄓ檬迪? 但是有许多许多数据结构可能被使用,并且每天都在发明新的。也许你能带来什么更快的东西!

  增强功能(Enhanced functionality): 假设你需要一个 Map (或 Set) 实现,它即可提供不变时间存取又可提供插入顺序迭代。这种性能的结合可用哈希表获得,它的所有元素被进一步以插入顺序连接到一个双向链表中(doubly-linked)。另外,作为一种替代选择,假设你需要一种有效的 bag 实现(也称作 multiset)-- 一个可提供不变时间访问同时允许复制元素的 Collection。 那么,在HashMap上实现这样的一个Collection是非常简单明了的。

  便利性(Convenience): 你可能需要由Java平台提供的那些实现之外的附加便利实现。例如,你可能经常需要一个代表单独键-值映射的不变 Map 对象、或代表一个连续的整数局域的 List 对象或者其他什么东西。

  适配器(Adapter): 假设你正在使用某些有着自己特别的collectioon API 的早期API。你可以编写一个适配器(adapter) 实现,它使那些 对象集 可以在 Java Collections Framework 上进行操作。一个适配器实现是一个薄的虚饰板,它可以包装一个类型的对象,并使其表现得象另一个类型的对象。这是通过将后一类型的操作转化到前一类型的结果。

  如何编写一个定制实现

  借助Java平台上的抽象实现(abstract implementations) 来编写定制实现出奇地简单。抽象实现是 核心 对象集 接口 的骨干实现,它明显地是为便于定制实现的编写而设计的。我们以一个例子开始,以下是一个 Arrays.asList的实现:

public static List asList(Object[] a) {
return new ArrayList(a);
}
private static class ArrayList extends AbstractList
implements java.io.Serializable
{
private Object[] a;
ArrayList(Object[] array) {
a = array;
}
public Object get(int index) {
return a[index];
}
public Object set(int index, Object 元素) {
Object oldValue = a[index];
a[index] = 元素;
return oldValue;
}
public int size() {
return a.length;
}
}

   相信不相信?这几乎就是包含在JDK中的实现。它是那样的简单! 你只提供构造函数、 get、 set 和 size 方法, 其余的都由 AbstractList 来做。而你免费获得了 ListIterator, 批量操作、搜索操作、哈希代码计算、比较和串表示法等。

责编:豆豆技术应用

正在加载评论...