zoukankan      html  css  js  c++  java
  • Java 集合系列02之 Collection架构

    目录 

    Collection概述

    1 Collection接口

    2 List接口

    3 Set接口

    4. AbstractCollection抽象类

    5 AbstractList抽象类

    6 AbstractSet抽象类

    7 Iterator

    8 ListIterator

    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对象。

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

     

    1 Collection接口

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

    Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。

    Collection方法列表:

    public interface Collection<E> extends Iterable<E> {
    
        int            size();
        boolean        isEmpty();
        boolean        contains(Object o);
        Iterator<E>    iterator();
        Object[]       toArray();
        <T> T[]        toArray(T[] a);
        boolean        add(E e);
        boolean        remove(Object o);
        boolean        containsAll(java.util.Collection<?> c);
        boolean        addAll(java.util.Collection<? extends E> c
        boolean        removeAll(java.util.Collection<?> c);
        boolean        retainAll(java.util.Collection<?> c);
        void           clear();
        boolean        equals(Object o);
        int            hashCode();
    
        @Override
        default Spliterator<E> spliterator() {
            return Spliterators.spliterator(this, 0);
        }
    
        default Stream<E> stream() {
            return StreamSupport.stream(spliterator(), false);
        }
    
        default Stream<E> parallelStream() {
            return StreamSupport.stream(spliterator(), true);
        }
    }

    2 List接口

    List是一个继承于Collection的接口,List是有序的队列,List中的每一个元素都有一个索引,都可以根据索引随机访问;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。

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

    List方法列表:

    public interface List<E> extends Collection<E> {
    
        int          size();
        boolean      isEmpty();
        boolean      contains(Object o);
        Iterator<E>  iterator();
        Object[]     toArray();
        <T> T[]      toArray(T[] a);
        boolean      add(E e);
        boolean      remove(Object o);
        boolean      containsAll(Collection<?> c);
        boolean      addAll(Collection<? extends E> c);
        boolean      removeAll(Collection<?> c);
        boolean      retainAll(Collection<?> c);
        void         clear();
        boolean      equals(Object o);
        int          hashCode();
        
        @Override
        default Spliterator<E> spliterator() {
            return Spliterators.spliterator(this, Spliterator.ORDERED);
        }
    
        
        boolean             addAll(int index, Collection<? extends E> c);
        E                   get(int index);
        E                   set(int index, E element);
        void                add(int index, E element);
        E                   remove(int index);
        int                 indexOf(Object o);
        int                 lastIndexOf(Object o);
        ListIterator<E>     listIterator();
        ListIterator<E>     listIterator(int index);
        java.util.List<E>   subList(int fromIndex, int toIndex);
        
        default void replaceAll(UnaryOperator<E> operator) {
            Objects.requireNonNull(operator);
            final ListIterator<E> li = this.listIterator();
            while (li.hasNext()) {
                li.set(operator.apply(li.next()));
            }
        }
    
        @SuppressWarnings({"unchecked", "rawtypes"})
        default void sort(Comparator<? super E> c) {
            Object[] a = this.toArray();
            Arrays.sort(a, (Comparator) c);
            ListIterator<E> i = this.listIterator();
            for (Object e : a) {
                i.next();
                i.set((E) e);
            }
        }
    }

    说明:相比与Collection,List方法列表中红色部分的方法是新增的,大多数方法是跟List集合中索引相关;ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。

    3 Set接口

    Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合。

    Set的方法列表和Collection完全一样,Set接口方法列表:

    public interface Collection<E> extends Iterable<E> {
    
        int            size();
        boolean        isEmpty();
        boolean        contains(Object o);
        Iterator<E>    iterator();
        Object[]       toArray();
        <T> T[]        toArray(T[] a);
        boolean        add(E e);
        boolean        remove(Object o);
        boolean        containsAll(java.util.Collection<?> c);
        boolean        addAll(java.util.Collection<? extends E> c
        boolean        removeAll(java.util.Collection<?> c);
        boolean        retainAll(java.util.Collection<?> c);
        void           clear();
        boolean        equals(Object o);
        int            hashCode();
    
        @Override
        default Spliterator<E> spliterator() {
            return Spliterators.spliterator(this, 0);
        }
    
        default Stream<E> stream() {
            return StreamSupport.stream(spliterator(), false);
        }
    
        default Stream<E> parallelStream() {
            return StreamSupport.stream(spliterator(), true);
        }
    }

     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接口中的方法完全一样,Set也就没有自己单独的方法。和AbstractCollection一样,它实现了List中除iterator()和size()之外的函数。
    AbstractSet的主要作用:它实现了Set接口中的大部分函数。从而方便其它类实现Set接口。

    7 Iterator

    Iterator的定义如下:

    public interface Iterator<E> {}

    Iterator是一个接口,它是Collection所有子类集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator功能有:是否存在下一个元素、获取下一个元素、删除当前元素。
    注意:Iterator遍历Collection时,是fail-fast机制的。即,当通过iterator遍历某集合的过程中,若该集合的内容被修改,就会抛出ConcurrentModificationException异常,产生fail-fast事件。 

    boolean hasNext()
    E next()
    void remove()

    8 ListIterator

    ListIterator的定义如下:

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

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

  • 相关阅读:
    02_类和对象
    Django_数据库增删改查——增
    Django_同步数据库
    Django_models类属性。
    CSS_垂直居中
    CSS_背景属性
    CSS_定位
    CSS_浮动
    CSS_盒子模型
    CSS_元素的分类
  • 原文地址:https://www.cnblogs.com/lizhouwei/p/9162203.html
Copyright © 2011-2022 走看看