优秀的编程知识分享平台

网站首页 > 技术文章 正文

轻松解读源码系列之Java集合接口&抽象类(2)—AbstractCollection

nanyue 2024-10-08 05:38:48 技术文章 5 ℃

大家好,我是程序员xiao熊,本篇内容是《轻松解读源码系列之Java集合接口&抽象类》系列的第二篇,主要讲解抽象类AbstractCollection;第一篇的内容可参考:

轻松解读源码系列之Java集合接口&抽象类(1)—Map和Collection

接下来进入正题,本篇内容分为两部分

  1. AbstractCollection介绍
  2. AbstractCollection方法说明

1、AbstractCollection介绍

首先看一下AbstractCollection的继承结构图,如下图所示;AbstractCollection是Collection接口的一个基础实现,最大限度地降低了实现Collection所需要的开发工作; 同时,AbstractCollection还是List、Queue、Set三大体系抽象类的父类;

对于AbstractCollection的子类实现,要实现一个不可修改的集合,开发者只需要继承这个类并实现iterator和size方法。(迭代器方法返回的迭代器必须实现hasNext和next方法。)

要实现一个可修改的集合,开发者必须重写add方法(否则会抛出UnsupportedOperationException),并且迭代器方法返回的迭代器必须实现它的remove方法。

Collection接口规范中提到,开发者一般应该提供两个构造函数,如下所示:

  • 无参构造函数:创建空的集合
  • 入参为Collection的构造函数:创建一个包含入参集合所有元素的集合(即可以复制一个集合)。

该类中每个非抽象方法的文档说明详细描述了它的实现。如果子类有更高效的实现,则可以覆盖这些方法。

方法说明

AbstractCollection方法的说明如下表所示;AbstractCollection的方法中,除了size()和iterator()方法是抽象方法之外,其他的方法都已经提供了基础版本的实现,而且大部分方法的实现都依赖size()和iterator()方法;而add(E e)方法的实现也只是抛出了UnsupportedOperationException,需要子类根据实际场景进行实现;

boolean add(E e)


添加元素到集合中

boolean addAll(Collection<? extends E> c)


添加一个集合中的元素到当前集合中

void clear()


清除集合中的元素

boolean contains(Object o)


判断集合是否包含指定的对象

boolean containsAll(Collection<?> c)


判断是否包含指定集合中所有的元素

boolean isEmpty()


判断集合是否为空

Iterator<E> iterator()


返回包含元素的iterator对象

boolean remove(Object o)


删除指定的元素

boolean removeAll(Collection<?> c)


删除存在于指定集合中所有的元素

boolean retainAll(Collection<?> c)


保留存在于指定集合中的所有元素

int size()


返回返回集合中元素的数量

Object[] toArray()


将元素以Object数组形式返回,返回的数组与集合互不影响

<T> T[] toArray(T[] a)

返回指定类型的数组,返回的数组与集合互不影响

欢迎关注【程序员xiao熊】,今天的分享就到这里,欢迎大家在评论区进行交流

最近发表
标签列表