java集合系列 02 Collection
2017-12-28 17:18
627 查看
java集合系列 02 Collection
概要
首先,对Collection进行说明。下面是Collection的继承关系的主要类图,(这里只列举了抽象类和接口,来说明Collection的整体结构)Collection是一个接口,它主要的俩个分支是:List 和Set。
List和Set都是接口,他们继承于Collection。
List是有序队列,这里所说的有序队列是指,按照什么顺序添加,可以以相同的顺序取出来,List中可以有相同的元素。
Set可以和数学概念中的集合类比,不过Set中不允许有重复的元素。
由上面的类图可以看出,首先抽象出了一个AbstractCollection抽象类,实现了Collection接口中的大部分方法,方便后面代码的编写。接着AbstractList 和 AbstractSet继承了AbstractCollection。其中AbstraList实现了List中特有的一写方法,AbstractSet实现了对于Set来说通用的一些方法。这样做可以方便子类的编写。这很好的体现了面向对象的思想。
另外要说明的一点是,Collection继承了Iterator接口,所以每一个实现了Collection接口的类中,都可以使用迭代器遍历。List系列的集合实现了一个特有的ListIterator接口,在这个接口中增加了一些添加,删除等方法。
通过上面的介绍可以发现,Collection体系中的集合并不是特别的复杂,所以只要细心的理一下,还是很容易理解和使用的。
主要内容
Collection 简介List 简介
Set 简介
AbstractCollection
AbstractList
AbstractSet
Iterator 请看我的另一篇博客Iterator 和 iterable 区别
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)
相关文章推荐
- java集合系列 02 Collection
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列 02 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java集合系列02 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java 集合系列02之 Collection架构
- Java【集合系列】-02-Collection架构
- Java 集合总结(Collection系列与Map系列)
- java集合02--collection架构
- Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList
- Java 集合总结(Collection系列与Map系列)
- Java 集合:Collection 系列(HashSet)
- java 集合系列(2) --------------Collection