java集合系列 02 Collection

5 篇文章 0 订阅

java集合系列 02 Collection

概要

首先,对Collection进行说明。下面是Collection的继承关系的主要类图,(这里只列举了抽象类和接口,来说明Collection的整体结构)

Collection 整体架构图

Collection是一个接口,它主要的俩个分支是:ListSet

ListSet都是接口,他们继承于Collection。

List是有序队列,这里所说的有序队列是指,按照什么顺序添加,可以以相同的顺序取出来,List中可以有相同的元素。

Set可以和数学概念中的集合类比,不过Set中不允许有重复的元素。

由上面的类图可以看出,首先抽象出了一个AbstractCollection抽象类,实现了Collection接口中的大部分方法,方便后面代码的编写。接着AbstractList 和 AbstractSet继承了AbstractCollection。其中AbstraList实现了List中特有的一写方法,AbstractSet实现了对于Set来说通用的一些方法。这样做可以方便子类的编写。这很好的体现了面向对象的思想。

另外要说明的一点是,Collection继承了Iterator接口,所以每一个实现了Collection接口的类中,都可以使用迭代器遍历。List系列的集合实现了一个特有的ListIterator接口,在这个接口中增加了一些添加,删除等方法。

通过上面的介绍可以发现,Collection体系中的集合并不是特别的复杂,所以只要细心的理一下,还是很容易理解和使用的。

主要内容

  1. Collection 简介
  2. List 简介
  3. Set 简介
  4. AbstractCollection
  5. AbstractList
  6. AbstractSet
  7. Iterator 请看我的另一篇博客Iterator 和 iterable 区别
  8. ListIterator

1. Collection 简介

Collection 定义如下

public interface Collection<E> extends Iterable<E>{}

本身是一个接口,高度抽象出来集合,它包含了集合的基本操作:添加、删除、清空、遍历、、是否为空、获取大小、是否保护某元素等等。

在Java API规定,所有实现Collection接口的子类(直接子类和间接子类)都必须实现2中构造参数:不带参数的构造参数(为了创建出一个空的集合类)和带参数的构造参数(用参数创建出一个新的集合类,也就是可以转换集合类)。

//Collection 接口
public abstract boolean add(E e)  //添加元素
public abstract boolean add(Collection<? extend E> c) //添加集合
public abstract void clear()   //清空集合
public abstract boolean contains(Object o) //判断集合是否包含此元素
public abstract boolean containsAll(Collection<?> c)
                              //判断集合中是否包含参数集合中所有的元素
public abstract boolean  equals(Object object)  //比较俩个是否相同
public abstract int     hashCode()   //返回hash值
public abstract boolean         isEmpty()    //是否为空
public abstract Iterator<E>     iterator()   //返回迭代器
public abstract boolean remove(Object object)  //删除某个元素
public abstract boolean removeAll(Collection<?> collection)  //删除参数中的元素        
public abstract boolean retainAll(Collection?> collection)  //保留参数集合中元素
public abstract int             size()  //返回集合的大小
public abstract <T> T[]         toArray(T[] array) //返回T类型的数组
public abstract Object[]        toArray()  //返回包含集合所有元素的集,是Object类型

2. List 简介

List 定义如下:

public interface List<E> extends Collection<E> {}

List 是一个继承了Collection的接口,是集合的一种,是一个有序集合。List中的每一个集合都有一个索引,第一个元素的索引是0,往后的元素一次加1,List中允许有重复的元素

关于API方面。既然List是继承于Collection接口,它自然就包含了Collection中的全部函数接口;由于List是有序队列,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。

// 相比与Collection,List新增的API:
abstract void                add(int location, E object)
abstract boolean             addAll(int location, Collection<? extends E> collection)
abstract E                   get(int location)
abstract int                 indexOf(Object object)  //返回第一个出现出现元素的索引
abstract int                 lastIndexOf(Object object)
abstract ListIterator<E>     listIterator(int location)  //从location位置开始返回
abstract ListIterator<E>     listIterator()//返回listIterator对象
abstract E                   remove(int location)
abstract E                   set(int location, E object) //替换某个位置的元素
abstract List<E>             subList(int start, int end) //返回当前List的子集

3. Set 简介

Set的定义如下:

public interface Set<E> extends Collection<E> {}

Set是一个继承与COllection的接口,也是集合中的一种。Set是不允许有重复元素的集合。在API上,和Collection完全一样

4. AbstractCollection

AbstractCOllection 定义如下:

public abstract class AbstractCollection<E> implements Collection<E> {}

AbstractCollection 是一个抽象类,他事先了COllection中除Iterator()和size()之外的函数

AbstractCollection的主要作用:它实现了Collection接口中的大部分函数。从而方便其它类实现Collection,比如ArrayList、LinkedList等,它们这些类想要实现Collection接口,通过继承AbstractCollection就已经实现了大部分的接口了。

5. AbstractList

AbstractList的定义如下:

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()接口。

6 AbstractSet

AbstractSet的定义如下:

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接口。

7. Iterator

>

8. ListIterator

ListIterator的定义如下:

public interface ListIterator<E> extends Iterator<E> {}

ListIterator是一个继承于Iterator的接口,它是队列迭代器。专门用于便利List,能提供向前/向后遍历。相比于Iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等API接口。

// ListIterator的API
// 继承于Iterator的接口
abstract boolean hasNext()
abstract E next()
abstract void remove()
// 新增API接口
abstract void add(E object)
abstract boolean hasPrevious()
abstract int nextIndex()
abstract E previous()
abstract int previousIndex()
abstract void set(E object)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值