集合类库(一):集合类库的基本框架
2009-09-18 00:00:00 来源:WEB开发网值得一提的是:LinkedList实现List接口的add(E o)操作完全覆盖了它老爹的add(E o)方法。而且只是遵循了AbstractList的插入要求(在末尾插入),但用了一种新的适合高效链表的实现策略。也就是说我们直接调用 LinkedList.add(E o)将会采用这种新策略实现。
但是,如果LinkedList中没有add(E o)方法又会怎么样?好的,一点都不会有问题,因为LinkedList实现了随机位置插入方法add(int index, E element)。你还记得 AbstractList类中add(E o)的实现途径不? 没错,就是用到了这个随机add(size(), o)。也就是说,我们即使在LinkedList中不写add(E o)方法,只要实现了 add(int index, E element)方法,依然能通过父类所定义了实现策略完成末尾添加功能的。
这下,我们理解了这种抽象类,具体类分离实现的好处了吧。
ArrayList (标准具体类)
此类提供一个大小可变数组的操作。
Java代码
public boolean add(E o) {
ensureCapacity(size + 1); // 动态增加容量
elementData[size++] = o;
return true;
}
public void ensureCapacity(int minCapacity) {
….//
}
}
public void add(int index, E element) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
ensureCapacity(size+1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
ArrayList的add(E o)又是一种完全不同的实现途径,但是实现结果都是一样的:在末尾添加。
(6) 总结
JDK5.0集合框架的总体设计就是做到:接口,抽象类,具体类的分离。
接口: 定义了集合必须实现的所有方法,但并没有具体实现。
抽象类: 提供接口中大部分方法的基本实现,可以说是提供了实现的案例。
具体类: 继承抽象类,并提供接口中特殊方法的实现。 具体类可以使用抽象类的基本方法,也可以自己定义高效的实现方法。但必须实现抽象类中没有实现的,但接口中定义了的方法。
更多精彩
赞助商链接