JDK1.7源碼分析01-Collection

同步發佈:http://www.yuanrengu.com/index.php/20180221.htmlphp

Java的集合類主要由兩個接口派生而出:Collection和Map。Collection是一個接口,它主要的兩個分支爲List和Set,Map的介紹會在後面的系列中進行詳細的分析。以下圖所示爲Collection接口、子接口及其實現類的繼承樹。html

源碼分析以下:java

package java.util;

/**
 * Collection繼承了迭代器的接口,即整個集合類都採用了迭代器模式
 */
public interface Collection<E> extends Iterable<E> {
    // Query Operations

    /**
     * 返回集合的大小。
     * 若是集合的大小超過Integer.MAX_VALUE,則返回Integer.MAX_VALUE
     */
    int size();

    /**
     * 判斷集合是否爲空
     */
    boolean isEmpty();

    /**
     * 判斷集合中是否有元素o。
     * 這裏要特別注意下元素o是否與集合裏的元素類型兼容,以及o是否爲null
     */
    boolean contains(Object o);

    /**
     * 返回集合中元素的迭代器,但不能保證返回順序(除非集合指定了順序)
     */
    Iterator<E> iterator();

    /**
     * 返回一個數組(包含集合中全部的元素)。
     * 如何集合中的元素是有序的,則返回的數組中的元素也是有序的。
     * 這個方法可用於集合與數組之間的轉換
     */
    Object[] toArray();

    /**
     * 以數組形式返回指定數組類型的集合元素
     */
    <T> T[] toArray(T[] a);

    // Modification Operations

    /**
     * 用於向集合裏添加元素
     * 若是集合對象被添加操做改變了則返回true
     */
    boolean add(E e);

    /**
     * 刪除元素
     */
    boolean remove(Object o);

    // Bulk Operations

    /**
     * 用來判斷是否含有指定集合c中的全部元素
     */
    boolean containsAll(Collection<?> c);

    /**
     * 將指定集合c中的全部元素添加至調用者的集合中
     */
    boolean addAll(Collection<? extends E> c);

    /**
     * 刪除集合中所包含的c裏面的元素
     */
    boolean removeAll(Collection<?> c);

    /**
     * 保留與集合c中相同的元素(即移除與指定集合不一樣的元素)
     * 至關於把調用該方法的集合變成該集合和集合c的交集
     */
    boolean retainAll(Collection<?> c);

    /**
     * 清除集合裏的全部元素,集合長度變爲0
     */
    void clear();


    // Comparison and hashing

    /**
     * 判斷與指定元素是否相等
     */
    boolean equals(Object o);

    /**
     * 返回集合的哈希碼值
     */
    int hashCode();
}

Collection繼承了Iterable,如圖所示:數組

Iterable源碼分析以下:源碼分析

/**
 * 迭代器接口
 */
public interface Iterable<T> {

    /**
     * 返回元素類型爲T的迭代器
     */
    Iterator<T> iterator();
}

其中Iterator的源碼以下:spa

/**
 * 迭代器接口類
 */
public interface Iterator<E> {

    /**
     * 若是被迭代的集合元素尚未被遍歷,則返回true
     */
    boolean hasNext();

    /**
     * 返回集合裏的下一個元素
     */
    E next();

    /**
     * 刪除集合裏上一次next方法返回的元素
     */
    void remove();
}

Iterator僅用於遍歷集合,Iterator自己並不提供裝對象的能力。若是須要建立Iterator對象,則必須有一個被迭代的集合。Iterator必須依附於Collection對象,若有一個Iterator對象,則必然有一個與之關聯的Collection對象。特別要注意的是,當使用Iterator對集合元素進行迭代時,Iterator並非把集合元素自己傳給了迭代變量,而是把集合元素的值傳給了迭代變量,因此修改迭代變量的值對集合元素自己沒有任何影響。  htm

相關文章
相關標籤/搜索