Java集合系列之Collection接口

Colection接口和Map接口一起構成了Java的集合框架的主幹部分,是對於集合類型的數據操作的抽象。

Collection抽象數據類型

ADT
Collection (數據抽象類型名)

Data
數據集合爲{a1,a2,a3.....,an},每個數據的數據類型都是DataType.

operations(僅定義邏輯方法,與JDK方法不保持一致)
   InitCollection(); 初始化創建集合
   AddElement(DataType d); 添加集合元素
   RemoveElement(DataType d); 刪除集合中元素
   Clear(); 清空集合

Collection接口依賴Iterable接口:
Iterable接口
Iterator接口
-iterator() 返回一個迭代器 iterator
- forEach(Consumer<? super T> action) 爲集合內每個元素執行函數action
- default Spliterator< T > spliterator() 返回一個Spliterator並行迭代器
Iterator接口
Iterator接口
方法剖析
- hasNext() 返回類型爲boolean,僅當如果迭代器還有下一個元素,返回true
- next() 返回類型爲 ,返回迭代器的下一個元素
- remove() default 方法 調用一次next()方法後可以調用一次,從迭代器刪除返回的最後一個元素
- forEachRemaining(Consumer<? super E> action) default 方法 Java8新方法,對迭代器中剩餘的所有元素執行action

Collection接口
這裏寫圖片描述
- 方法剖析
- add (E e) 向集合內添加指定元素
- addAll(Collection<? extends E> c) addAll(int index, Collection<?extends E> c) 向集合內(指定位置 index)添加另一集合的全部元素
- clear() 清空集合,可用於多次使用單個集合對象,節省資源
- contains(Object o) 判斷是否還有某個對象
- containsAll(Collection<?> c) 判斷是否含有集合c的所有元素
- parallelStream() java8新特性,使用fork/join框架自動並行處理
- remove(Object o) 移除集合中的一個元素
- removeAll(Collection<> c) 移除集合含有的集合c中的所有元素
- removeIf(Predicate<? super E> filter) 底層迭代調用Predicate接口的test方法
Predicate函數式接口 主要用提供test()方法,該方法返回一個布爾變量
- spliterator() 並行迭代器
- stream() 返回集合的流資源,用於函數式運算
- toArray() 轉換成數組
- toArray(T[] a) 將集合轉換成對應對象類型的數組

spliterator(splitable iterator可分割迭代器)接口是Java8新增加的迭代器,爲了並行遍歷數據源中的元素而設計的迭代器,這個可以類比最早Java提供的順序遍歷迭代器Iterator,但一個是順序遍歷,一個是並行遍歷

spliterator接口
並行迭代器接口,Java8新增的迭代器接口
Spliterator接口
boolean tryAdvance(Consumer<? super T> action) 該方法會處理每個元素,如果沒有元素處理,則應該返回false,否則返回true

Spliterator trySplit() 將一個Spliterator分割成多個Spliterator。分割的Spliteratork可被用於每個子線程進行處理,從而達到併發處理的效果

default void forEachRemaining(T_CONS action) 該方法爲接口默認實現方法,循環調用tryAdvance遍歷集合內的所有元素

long estimateSize() 集合迭代後的大小

int characteristics() 枚舉值,返回Spliterator具有的流特性,枚舉爲ORDERED | SIZED | SUBSIZED | NONNULL | IMMUTABLE |DISTINCT

default void forEachRemaining(Consumer<? super T> action) 對於集合內每個元素執行action函數

default Comparator<? super T> getComparator() 獲取集合的比較器

Consumer接口

Consumer接口

Consumer接口期望使用void accept(T t)方法改變入參的值

void accept(T t) 對於入參t執行當前函數

default Consumer andThen(Consumer<? super T> after) 對入參執行當前函數後,繼續執行after函數

    Consumer<String> d=(x) -> System.out.print(x.toLowerCase());
    d.andThen((i) ->                  System.out.println(i.toLowerCase())).accept("AbcD");

Predicate接口

Predicate接口

Predicate用於判斷輸入參數是否符合要求

Predicate被@FunctionalInterface註解,表示接口只能有一個抽象方法

boolean test(T t) 對於元素t執行當前函數
default Predicate and(Predicate<? super T> other) 判斷other非空後,與當前函數做與邏輯判斷
default Predicate negate() 對當前函數做非邏輯判斷
default Predicate or(Predicate<? super T> other) 判斷other非空後,與當期函數做非邏輯判斷
static Predicate isEqual(Object targetRef) 判斷數據targetRef是否和函數處理的數據equals

    Predicate<String> a=(s) -> s.length()>3;
    Predicate<String> b=(s)  -> s.length()>4;

    Predicate<String> c=Predicate.isEqual("abc");


    System.out.println(c.test("abc"));

    System.out.println(a.and(b).test("abcde"));

    System.out.println(a.or(b).test("abc"));

    System.out.println(a.negate().test("a"));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章