Java集合-Collection
来源:互联网 发布:部队建设强军数据 编辑:程序博客网 时间:2024/05/22 08:24
首先来看看Collection的一些框架类关系图:
Collection是一个接口,它主要的两个分支是:List 和 Set。
List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素!
List和Set都有它们各自的实现类。
为了方便,我们抽象出了AbstractCollection抽象类,它实现了Collection中的绝大部分函数;这样,在Collection的实现类中,我们就可以通过继承AbstractCollection省去重复编码。AbstractList和AbstractSet都继承于AbstractCollection,具体的List实现类继承于AbstractList,而Set的实现类则继承于AbstractSet。
另外,Collection中有一个iterator()函数,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集合。ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。
接下来,我们看看各个接口和抽象类的介绍;然后,再对实现类进行详细的了解
1 Collection简介
2 List简介
3 Set简介
4 AbstractCollection
5 AbstractList
6 AbstractSet
7 Iterator
8 ListIterator
1.Collection
Collection的定义如下:
public interface Collection<E> extends Iterable<E> {}它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。
Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。
Collection的API
// Collection的APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean removeAll(Collection<?> collection)abstract boolean retainAll(Collection<?> collection)abstract int size()abstract <T> T[] toArray(T[] array)abstract Object[] toArray()
2.List
List的定义如下:
public interface List<E> extends Collection<E> {}List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。
关于API方面。既然List是继承于Collection接口,它自然就包含了Collection中的全部函数接口;由于List是有序队列,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。
// Collection的APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean removeAll(Collection<?> collection)abstract boolean retainAll(Collection<?> collection)abstract int size()abstract <T> T[] toArray(T[] array)abstract Object[] toArray()// 相比与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)abstract ListIterator<E> listIterator()abstract E remove(int location)abstract E set(int location, E object)abstract List<E> subList(int start, int end)
3.Set
Set的定义如下:
public interface Set<E> extends Collection<E> {}Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合。
Set的API和Collection完全一样。
// Set的APIabstract boolean add(E object)abstract boolean addAll(Collection<? extends E> collection)abstract void clear()abstract boolean contains(Object object)abstract boolean containsAll(Collection<?> collection)abstract boolean equals(Object object)abstract int hashCode()abstract boolean isEmpty()abstract Iterator<E> iterator()abstract boolean remove(Object object)abstract boolean removeAll(Collection<?> collection)abstract boolean retainAll(Collection<?> collection)abstract int size()abstract <T> T[] toArray(T[] array)abstract Object[] toArray()
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
Iterator的定义如下:
public interface Iterator<E> {}Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。
注意:Iterator遍历Collection时,是fail-fast机制的。即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在后面专门进行说明。
Iterator的API
// Iterator的APIabstract boolean hasNext()abstract E next()abstract void remove()
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 Collection (java 集合)
- java collection(java集合)
- java集合-----Collection
- Java集合Collection介绍
- Java集合框架Collection
- Java集合框架Collection
- java集合Collection
- Java 集合框架-Collection
- java中的集合Collection
- java 集合-001 Collection
- Java 集合(Collection)
- Java collection 集合分析
- Java Collection框架集合
- Java Collection (集合框架)
- java集合框架->Collection
- Java Collection与集合
- Java集合之Collection
- java 集合Collection架构
- 简易电子钟设计
- cognitive-services系列 -- 使用微软cognitive-services中的人脸识别模块
- Navicat连接Oracle数据库失败,提示“unsupported server charset ZHS16GBK”的解决方法
- Android 代码实现Layout控件编程
- iOS之iOS9新特性——泛型<ObjectType>
- Java集合-Collection
- 交叉编译 protobuf2.4 库 实现在arm平台上使用
- 解读“中国制造2025”机器人领域技术路线图之机器人标准制定
- 路由器维修2
- Linux用户及组管理
- 【jzoj4963】【book】【二分图匹配】
- 洛谷 P1984 [SDOI2008]烧水问题
- 51nod 1202 子序列个数【dp】好题!
- 设计模式深入学习-Factory Method设计模式