java集合抽象类
抽象类
abstractcollection
1 | public abstract class AbstractCollection<E> implements Collection<E> |
AbstractCollection是一个抽象类,它实现了Collection中除iterator()和size()之外的函数。
AbstractCollection的主要作用:它实现了Collection接口中的大部分函数。从而方便其它类实现Collection,比如ArrayList、LinkedList等,它们这些类想要实现Collection接口,通过继承AbstractCollection就已经实现了大部分的接口了。
abstractlist
1 | public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> |
AbstractList是一个继承于AbstractCollection,并且实现List接口的抽象类。它实现了List中除size()、get(int location)之外的函数。
AbstractList的主要作用:它实现了List接口中的大部分函数。从而方便其它类继承List。
另外,和AbstractCollection相比,AbstractList抽象类中,实现了iterator()接口。
abstractset
1 | public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> |
AbstractSet是一个继承于AbstractCollection,并且实现Set接口的抽象类。由于Set接口和Collection接口中的API完全一样,Set也就没有自己单独的API。和AbstractCollection一样,它实现了List中除iterator()和size()之外的函数。
AbstractSet的主要作用:它实现了Set接口中的大部分函数。从而方便其它类实现Set接口。
abstractmap
1 | public abstract class AbstractMap<K, V> implements Map<K, V> |
对应于AbstractCollection
,AbstractMap
的作用也是类似的,主要是针对 Map 提供一些方法的通用实现。如果需要实现一个不可修改的 Map,只需要继承 AbstractMap 并重写 entrySet 方法。entrySet 方法返回的 Set 集合不应该支持 add、remove 方法,其迭代器也不应该支持 remove 方法。要实现可修改的 Map,必须重写此类的 put 方法(AbstractMap 默认抛出 UnsupportedOperationException 异常)和 entrySet 方法。iterator 方法返回的迭代器必须实现 remove 方法。
entrySet 方法在 AbstractMap 中仍然是一个抽象方法。
1 | public abstract Set<Entry<K,V>> entrySet(); |
另外在 AbstractMap 中定义了两个变量,这两个变量在 AbstractMap 的子类 HashMap、TreeMap 都有用到。被用来存储返回的集合视图。
1 | // 存储 key 集合 |
abstractsequentiallist
( Sequential 相继的,按次序的)
AbstractSequentialList 继承自 AbstractList,是 LinkedList
的父类,是 List 接口 的简化版实现。
简化在哪儿呢?简化在 AbstractSequentialList 只支持按次序访问,而不像 AbstractList 那样支持随机访问。
想要实现一个支持按次序访问的 List的话,只需要继承这个抽象类,然后把指定的抽象方法实现就好了。需要实现的方法:
- size()
- listIterator(),返回一个 ListIterator
你需要实现一个 ListIterator
, 实现它的 hasNext()
, hasPrevious()
, next()
, previous()
, 还有那几个 获取位置 的方法,这样你就得到一个不可变的 ListIterator 了。如果你想让它可修改,还需要实现 add()
, remove()
, set()
方法。
正如在 每个 Collection 接口 中提倡的那样,AbstractSequentialList 的子类需要提供两个构造函数,一个无参,一个以 Collection 为参数。