Collection接口介紹

Collection接口介紹

  1. 一個Collection表明一組對象,是集合體系中的根接口。一些容許有重複的元素一些不容許,一些有順序一些沒有順序。JDK不提供此接口具體類的直接實現,只會有子接口和抽象類的實現(如List和Set),此接口一般用於傳遞集合和須要最大通用性時使用(如以接口做爲形參時);
  2. 全部此接口的實現類都應該提供一個無參構造器和一個以Collection和參數的有參構造器。這並非語法上強制規定的而是java規範規定的,由於接口中不能包含構造器;
  3. 此接口實現類若是不支持某個方法,能夠拋UnsupportedOperationException;
  4. 不一樣實現類對其所包含的元素可能會有不一樣的限制,若有的不容許添加null,有的對元素類型有限制。試圖添加不符合條件的元素可能會拋出NullPointerException或ClassCastException,試圖查詢一個不符合條件的元素會拋出異常或返回false,這取決於不一樣的實現;
  5. 同步策略由每一個實現類本身決定;

查詢操做:java

/**
     * 返回集合中元素的個數,若是元素個數超過Integer.MAX_VALUE,則返回Integer.MAX_VALUE
     */
    int size();
    /**
     * 判斷集合中元素是否爲空
     */
    boolean isEmpty();
    /**
     * 判斷集合中是否包含指定元素
     */
    boolean contains(Object o);
    /**
     * 返回一個迭代器,不保證迭代器中元素的順序,除非改集合實現類自己提供了保證
     */
    Iterator<E> iterator();
    /**
     * 將集合轉換爲數組,數組中元素的順序與該集合產生迭代器中的順序一致
    *這個方法是數組和列表之間的橋樑
     */
    Object[] toArray();
    /**
     * 返回一個集合元素類型的數組。若是集合知足指定的數組而且有足夠的空間,則在其中返回此集合
     *不然返回此集合大小的新數組。
     *若是集合有序,那麼返回此集合迭代器遍歷順序的數組
     *若是數組大小比集合元素多,那麼在數組知足集合元素後在末尾設置爲null
     *若是在數組中元素的類型不是集合中元素類型的超類,那麼拋ArrayStoreException異常
     *若是指定數組爲空,則拋出NullPointerException
     */
    <T> T[] toArray(T[] a);

 

修改操做:數組

/**
     * 確保此集合包含特定的元素類型。 若是此集合增長元素成功返回true。 若是此集合不容許有重複元素而且已經包含所傳參數,那麼返回false
     * 支持此操做的集合可能會限制向該集合添加哪些元素。特別的,有些集合會拒絕null元素,有些會對要增長的元素強加一些限制。
     * Collection實現類應該在文檔中明確指出全部的限制。
     * 若是集合以除已經包含元素以外的任何緣由拒絕添加特定元素,則必須拋出異常,(而不是返回false)。 這保留了集合在此調用返回後始終包含指定元素的不變式。
     */
    boolean add(E e);

    /**
     * 若是集合中包含此元素,則移除該元素; 若是集合中包含多個這樣的元素,則移除知足(o==null?e==null:o.equals(e))的元素;
     * 若是集合因該方法的調用而發生改變,則返回true; 若是指定元素的類型和集合不相容,拋出ClassCastException異常(可選的限制條件);
     * 若是指定元素是null而且這個集合不容許null元素存在,那麼拋出NullPointerException異常(可選的限制條件)
     * 若是此集合不支持remove操做那麼拋出UnsupportedOperationException異常(可選的限制條件)
     */
    boolean remove(Object o);

 

批量操做:多線程

/**
     * 若是this集合包含指定集合的全部元素,返回true
     * 若是該集合中元素的類型和this集合不相容,拋出ClassCastException異常(可選的限制條件)
     * 若是該集合中元素有一個或多個null而且this集合不容許null元素存在,那麼拋出NullPointerException異常(可選的限制條件)
     */
    boolean containsAll(Collection<?> c);

    /**
     * 將指定集合的全部元素到this集合中(可選的操做)。 若是指定的集合在操做進行時被修改了,那麼此操做行爲未定義。
     * (這意味着若是指定的集合是這個集合,而且這個集合是非空的,那麼這個調用的行爲是未定義的。) 若是調用結果改變了this集合返回true 若是
     * addAll操做不被此集合支持,那麼拋出UnsupportedOpertaionException異常
     * 若是指定集合包含了空元素而this集合不容許有空元素,那麼拋出NullPointerException異常
     * 若是this集合阻止hiding集合元素類型添加,那麼拋出ClassCastException異常
     * 若是指定集合的元素的某些屬性阻止將其添加到此集合,則拋出IllegalArgumentException
     * 因爲插入限制,若是不是全部元素均可以在此時添加,則拋出IllegalStateException異常
     */
    boolean addAll(Collection<? extends E> c);

    /**
     * 移除此集合中全部的包含在指定集合中的元素(可選的操做)。調用過此函數以後,那麼此集合和指定集合將再也不包含相同元素。 若是此集合因調用而更改那麼返回true
     * 若是此集合不支持removeAll方法,則拋出UnsupportedOperationException
     * 若是集合中一個或多個元素的類型與指定集合不兼容,則拋出ClassCastException(可選的操做)
     * 若是該集合包含一個或多個空元素,且指定的集合不支持空元素(optional),或者指定的集合爲空,則拋出NullPointerException異常
     */
    boolean removeAll(Collection<?> c);

    /**
     * 移除此集合中全部符合給定Predicate的元素。在迭代期間或由Predicate引起的錯誤或運行時異常將被轉發給調用方
     * 默認實現使用其迭代器遍歷集合的全部元素。每個匹配的元素使用iterator.remove()來移除。
     * 若是集合的iterator不支持移除將會拋出UnsupportedOperationException異常
     * 指定過濾器爲空,拋出NullPointerException 若是移除操做不支持,拋出UnsupportedOperationException異常
     */
    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;
    }

    /**
     * 只保留此集合中包含在指定集合中的元素(可選的操做) 也就是說,移除此集合中不包含在指定集合中的全部元素。 若是此集合改變了返回true
     * 若是此集合不支持retainAll,則拋出UnsupportedOperationException異常
     * 若是集合中一個或多個元素的類型與指定集合不兼容,則拋出ClassCastException(可選的操做)
     * 若是該集合包含一個或多個空元素,且指定的集合不支持空元素,或者指定的集合爲空,拋出NullPointerException(可選的操做)
     */
    boolean retainAll(Collection<?> c);

    /**
     * 移除此集合中的全部元素,此方法調用後,此集合應該爲空 若是此集合clear操做不支持將會拋出UnsupportOperationException異常。
     */
    void clear();

 

比較和hash:函數

    boolean equals(Object o);

    int hashCode();

 

 默認方法:ui

/**
     * 默認方法, 多線程中用的到,暫時不作討論
     */
    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);
    }

參考:https://www.jianshu.com/p/ef2990140d05this

相關文章
相關標籤/搜索