zoukankan      html  css  js  c++  java
  • java之Collection框架

    Collection的一些框架类的关系图:

    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中允许有重复的元素。

    关于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

    定义如下:

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

    AbstractCollection是一个抽象类,它实现了Collection中除iterator()和size()之外的函数。
    AbstractCollection的主要作用:它实现了Collection接口中的大部分函数。从而方便其它类实现Collection,比如ArrayList、LinkedList等,它们这些类想要实现Collection接口,通过继承AbstractCollection就已经实现了大部分的接口了。

    5 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

    定义如下:

    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

    定义如下:

    public interface Iterator<E> {}

    Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。
    注意:Iterator遍历Collection时,是fail-fast机制的。即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。关于fail-fast的详细内容,我们会在后面专门进行说明。TODO

    // Iterator的API
    abstract boolean hasNext()
    abstract E next()
    abstract void remove()

    8 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)

    本文来自http://www.cnblogs.com/skywang12345/p/3308513.html

  • 相关阅读:
    Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
    Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
    Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception
    Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block
    Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)
    软件研发打油诗祝大家节日快乐
    从挖井的故事中想到开发管理中最容易忽视的几个简单道理
    ITIL管理思想的执行工具发布
    管理类软件设计“渔”之演化
    20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
  • 原文地址:https://www.cnblogs.com/msymm/p/9871968.html
Copyright © 2011-2022 走看看