java源碼學習之Collection

rt.jar -> java.util

package java.util;


import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;


//集合根接口
public interface Collection<E> extends Iterable<E> {

    //返回這個集合內元素的數量,如果數量超過Integer的最大值則返回Integer的最大值 
    int size();
     
    boolean isEmpty();

    //如果傳入的元素在這個集合中返回true
    //如果傳入的元素不符合集合類型報ClassCastException類型轉換異常
    //如果傳入的元素爲Null報NullPointerException空指針異常
    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);


    
    //刪除該集合中滿足給定條件的所有元素。 
    //1.8新增方法,需要傳入一個函數式接口
    //默認方法,不用子類重寫
    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

    //僅保留該集合中包含的元素。 
    boolean retainAll(Collection<?> c);

    //從這個集合中刪除所有元素(可選操作)。
    void clear();

    boolean equals(Object o);
        
    int hashCode();

    //Spliterator(splitable iterator可分割迭代器)接口是Java爲了並行遍歷數據源中的元素而設計的迭代器,
    //這個可以類比最早Java提供的順序遍歷迭代器Iterator,但一個是順序遍歷,一個是並行遍歷
    @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);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章