为什么LinkedList
和ArrayList
在Java中扩展AbstractList
当我们希望在实现类中指定公共行为时,将使用抽象类。
但是AbstractList
中的所有方法都被ArrayList
和LinkedList
覆盖。
那么,扩展这个类有什么用呢?
发布于 2013-08-22 21:06:56
subList(int,int)
方法不会被ArrayList
和LinkedList
覆盖,为此,AbstractList
提供了一个通用的实现
来自Java源
public List<E> subList(int fromIndex, int toIndex) {
return (this instanceof RandomAccess ?
new RandomAccessSubList<E>(this, fromIndex, toIndex) :
new SubList<E>(this, fromIndex, toIndex));
}
此外,还有其他一些方法不像toString()
和iterator()
那样被过度使用。
发布于 2013-08-22 21:27:28
你可以从这里得到答案,,,AbstractList
该类提供列表接口的框架实现,以最小化在“随机访问”数据存储(例如数组)支持下实现该接口所需的工作量。对于顺序访问数据(例如链接列表),应该优先使用AbstractSequentialList。要实现不可修改的列表,程序员只需扩展该类并为get( index)和size()方法提供实现。
要实现可修改的列表,程序员还必须重写set( index,Object元素)方法(否则会抛出一个UnsupportedOperationException )。如果列表是可变大小的,程序员必须另外重写add(int索引、Object元素)和remove( index )方法。
按照Collection接口规范中的建议,程序员通常应该提供一个空(无参数)和Collection构造函数。
与其他抽象集合实现不同,程序员不必提供Iterator实现;迭代器和listIterator由该类实现,在“随机访问”方法之上: get(int索引)、set(int索引、对象元素)、set(int索引、对象元素)、add(int索引、Object元素)和remove(int索引)。
这个类中每个非抽象方法的文档详细描述了它的实现。如果正在实现的集合允许更有效的实现,则这些方法中的每一个都可能被重写。
发布于 2013-08-22 21:05:13
并不是所有来自AbstractList
的方法都被重写。请记住,AbstractList
子类AbstractCollection
,它定义了containsAll
或toString
之类的方法,这些方法既不被ArrayList
也不被LinkedList
覆盖。
https://stackoverflow.com/questions/18395005
复制