Java中的collection集合类型总结

 更新时间:2016年05月23日 09:01:03   作者:kuiwu-wang   我要评论
Java的集合类型都是对java.util包中Collection接口的继承,这里我们主要介绍依赖于collection的一些主分支,一起来看一下Java中的collection集合类型总结

Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*
Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。
Java集合工具包框架如下图。

201652385524923.jpg (1576×586)

说明:看上面的框架图,先抓住它的主干,即Collection和Map。
Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。
Collection包含了List和Set两大分支。
(01) List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。
List的实现类有LinkedList, ArrayList, Vector, Stack。
(02) Set是一个不允许有重复元素的集合。
Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。
Map是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。
AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。
Hashtable虽然继承于Dictionary,但它实现了Map接口。
接下来,再看Iterator。它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。
ListIterator是专门为遍历List而存在的。
再看Enumeration,它是JDK 1.0引入的抽象类。作用和Iterator一样,也是遍历集合;但是Enumeration的功能要比Iterator少。在上面的框图中,Enumeration只能在Hashtable, Vector, Stack中使用。
最后,看Arrays和Collections。它们是操作数组、集合的两个工具类。
有了上面的整体框架之后,我们接下来对每个类分别进行分析。

Collection架构
下面,我们将对Collection进行概括。下面先看看Collection的一些框架类的关系图:

201652385616614.jpg (802×536)

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简介
Collection的定义如下:

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

它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。
Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。

// Collection的API
abstract 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中允许有重复的元素。 List的官方介绍如下:
A List is a collection which maintains an ordering for its elements. Every element in the List has an index. Each element can thus be accessed by its index, with the first index being zero. Normally, Lists allow duplicate elements, as compared to Sets, where elements have to be unique.
关于API方面。既然List是继承于Collection接口,它自然就包含了Collection中的全部函数接口;由于List是有序队列,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、“获取List中的子队列”等。

// Collection的API
abstract 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是没有重复元素的集合。
关于API方面。Set的API和Collection完全一样。

// Set的API
abstract 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的详细内容,我们会在fail-fast总结后面专门进行说明。

// Iterator的API
abstract 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异常的Exception e中的egetMessage()和toString()方法的区别

    浅谈Java异常的Exception e中的egetMessage()和toString()方法的

    下面小编就为大家带来一篇浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 详解使用spring cloud config来统一管理配置文件

    详解使用spring cloud config来统一管理配置文件

    这篇文章主要介绍了详解使用spring cloud config来统一管理配置文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Spring Cloud Feign文件传输的示例代码

    Spring Cloud Feign文件传输的示例代码

    微服务中通常使用 Feign 作为服务消费者,那么如何使用 Feign 接口传输文件呢?这篇文章主要介绍了Spring Cloud Feign文件传输的示例代码,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Mybatis中的resultType和resultMap查询操作实例详解

    Mybatis中的resultType和resultMap查询操作实例详解

    resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题。这篇文章主要介绍了Mybatis中的resultType和resultMap查询操作实例详解,需要的朋友可以参考下
    2016-09-09
  • Java异步处理机制实例详解

    Java异步处理机制实例详解

    本文涉及Java编程中异步处理机制的简单介绍和一个相关实例,相信通过这篇文章,大家能对异步处理有更多的了解。
    2017-09-09
  • Windows 10上JDK环境安装配置图文教程

    Windows 10上JDK环境安装配置图文教程

    这篇文章主要为大家详细介绍了Windows 10上JDK环境安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • spring启动后保证创建的对象不被垃圾回收器回收

    spring启动后保证创建的对象不被垃圾回收器回收

    最近看到一个问题是,spring在启动后如何保证创建的对象不被垃圾回收器回收?。所以本文结合jvm的垃圾回收机制和spring中的源代码做出自己的一点猜测。有需要的朋友们可以参考借鉴。
    2016-09-09
  • 集群环境中使用ehcache_动力节点Java学院整理

    集群环境中使用ehcache_动力节点Java学院整理

    这篇文章主要为大家详细介绍了集群环境中使用ehcache的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • SpringSecurity学习之自定义过滤器的实现代码

    SpringSecurity学习之自定义过滤器的实现代码

    这篇文章主要介绍了SpringSecurity学习之自定义过滤器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 图解Eclipse j2ee开发环境的搭建过程

    图解Eclipse j2ee开发环境的搭建过程

    这篇文章以图文结合的方式介绍了Eclipse j2ee开发环境的搭建过程,内容很详细,每一个步骤都有对应的操作截图,需要的朋友可以参考下
    2015-08-08

最新评论