Collection源碼閱讀

package java.util;import java.util.function.Predicate;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;/*** 集合層次結構的根接口,一個集合表示一組對象,稱為元素* JDK不提供任何該接口的直接實現,JDK提供實現特定情況的子接口,Set,List** 所有通用Collection實現類通常需要通過一個間接實現Collection接口的子接口來實現,* 而且需要提供兩個標準的構造函數,沒有參數的構造函數(空參構造),創建一個空集合;* 以及包含Collection類型的單個參數的構造函數,使用與其參數相同的元素創建一個新集合。* @author  Josh Bloch* @author  Neal Gafter* @see     Set* @see     List* @see     Map* @see     SortedSet* @see     SortedMap* @see     HashSet* @see     TreeSet* @see     ArrayList* @see     LinkedList* @see     Vector* @see     Collections* @see     Arrays* @see     AbstractCollection* @since 1.2*/
public interface Collection<E> extends Iterable<E> {// 查詢操作/*** 返回此集合中的元素數。如果這個集合 包含多于<tt> Integer.MAX_VALUE </ tt>的元素,返回 <tt> Integer.MAX_VALUE </ tt>。** @return 此集合中的元素數量*/int size();/*** 如果此集合不包含任何元素,則返回<tt> true </ tt>* @return <tt>true</tt> 如果此集合不包含任何元素*/boolean isEmpty();/**** 如果集合中包含至少一個指定對象,返回true* @param o 要測試其在此集合中的存在的元素* @return <tt>true</tt>  如果集合中包含該元素** @throws ClassCastException 如果指定元素的類型 與集合內元素類型不兼容* @throws NullPointerException 如果指定的元素為null且此 collection不允許null元素**/boolean contains(Object o);/*** 返回此集合中元素的迭代器。無法保證元素的返回順序*(除非此集合是某個提供保證的類的實例)。** @return an <tt>Iterator</tt> 覆蓋此集合中的元素*/Iterator<E> iterator();/*** 返回包含此集合中所有元素的數組。* 如果此集合對其迭代器返回的元素的順序做出任何保證,則此方法必須以相同的順序返回元素。** 返回的數組將是“安全的”,因為此集合不會保留對它的引用。* (換句話說,即使此集合由數組支持,此方法也必須分配新數組)。*  調用者因此可以自由修改返回的數組。** @return 包含此集合中所有元素的數組*/Object[] toArray();/*** 返回包含此集合中所有元素的數組;* 返回數組的運行時類型是指定數組的運行時類型。* 如果集合適合指定的數組,則返回元素到指定的數組中。* 否則,將使用指定數組的運行時類型和此集合的大小分配新數組。** 此集合適合指定的數組,如果有空余空間(即,數組的元素多于此集合),則緊跟集合結尾的數組中的元素將設置為<tt> null </ TT>。* (如果調用者知道此集合不包含任何<tt> null </ tt>元素,則此選項僅用于確定此集合的長度<i> </ i>。)** 如果此集合對其迭代器返回的元素的順序做出任何保證,則此方法必須以相同的順序返回元素。** @param <T> 包含集合的數組的運行時類型* @throws ArrayStoreException 如果指定數組的運行時類型不是此集合中每個元素的運行時類型的超類型* @throws NullPointerException 如果指定的數組為null*/<T> T[] toArray(T[] a);// 修改操作/*** 將元素e添加到集合中* 如果集合不允許重復元素,且集合中已經含有該元素,返回false* false-添加失敗*/boolean add(E e);/*** 從該 collection 中移除指定元素的單個實例,如果集合中存在指定元素返回true。*/boolean remove(Object o);// 批量操作/*** 如果此 collection 包含指定 collection 中的所有元素,則返回 true。*/boolean containsAll(Collection<?> c);/*** 將指定 collection 中的所有元素都添加到此 collection 中*/boolean addAll(Collection<? extends E> c);/*** 移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。*/boolean removeAll(Collection<?> c);/**** 刪除此集合中滿足給定布爾值函數的所有元素。在迭代期間或通過布爾值函數拋出的錯誤或運行時異常被中繼到調用者。* 默認使用迭代器進行刪除元素** @param filter 一個布爾值函數,它返回{@code true}表示要刪除的元素* @return {@code true} 如果刪除了任何元素* @since 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);/*** 移除此 collection 中的所有元素。*/void clear();// 比較和散列/***  比較此 collection 與指定對象是否相等。通過覆蓋,實現list與list相等,set與set相等*/boolean equals(Object o);/*** 返回此 collection 的哈希碼值。*/int hashCode();/**** Spliterator是一個可分割迭代器(splitable iterator),可以和iterator順序遍歷迭代器一起看。jdk1.8發布后,對于并行處理的能力大大增強,Spliterator就是為了并行遍歷元素而設計的一個迭代器,jdk1.8中的集合框架中的數據結構都默認實現了spliterator** 在此集合中的元素上創建{@link Spliterator}。** 后續如果講到了{@link Spliterator}再進行補充下面的三個方法*** Implementations should document characteristic values reported by the* spliterator.  Such characteristic values are not required to be reported* if the spliterator reports {@link Spliterator#SIZED} and this collection* contains no elements.** <p>The default implementation should be overridden by subclasses that* can return a more efficient spliterator.  In order to* preserve expected laziness behavior for the {@link #stream()} and* {@link #parallelStream()}} methods, spliterators should either have the* characteristic of {@code IMMUTABLE} or {@code CONCURRENT}, or be* <em><a href="Spliterator.html#binding">late-binding</a></em>.* If none of these is practical, the overriding class should describe the* spliterator's documented policy of binding and structural interference,* and should override the {@link #stream()} and {@link #parallelStream()}* methods to create streams using a {@code Supplier} of the spliterator,* as in:* <pre>{@code*     Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)* }</pre>* <p>These requirements ensure that streams produced by the* {@link #stream()} and {@link #parallelStream()} methods will reflect the* contents of the collection as of initiation of the terminal stream* operation.** @implSpec* The default implementation creates a* <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator* from the collections's {@code Iterator}.  The spliterator inherits the* <em>fail-fast</em> properties of the collection's iterator.* <p>* The created {@code Spliterator} reports {@link Spliterator#SIZED}.** @implNote* The created {@code Spliterator} additionally reports* {@link Spliterator#SUBSIZED}.** <p>If a spliterator covers no elements then the reporting of additional* characteristic values, beyond that of {@code SIZED} and {@code SUBSIZED},* does not aid clients to control, specialize or simplify computation.* However, this does enable shared use of an immutable and empty* spliterator instance (see {@link Spliterators#emptySpliterator()}) for* empty collections, and enables clients to determine if such a spliterator* covers no elements.** @return a {@code Spliterator} over the elements in this collection* @since 1.8*/@Overridedefault Spliterator<E> spliterator() {return Spliterators.spliterator(this, 0);}/*** Returns a sequential {@code Stream} with this collection as its source.** <p>This method should be overridden when the {@link #spliterator()}* method cannot return a spliterator that is {@code IMMUTABLE},* {@code CONCURRENT}, or <em>late-binding</em>. (See {@link #spliterator()}* for details.)** @implSpec* The default implementation creates a sequential {@code Stream} from the* collection's {@code Spliterator}.** @return a sequential {@code Stream} over the elements in this collection* @since 1.8*/default Stream<E> stream() {return StreamSupport.stream(spliterator(), false);}/*** Returns a possibly parallel {@code Stream} with this collection as its* source.  It is allowable for this method to return a sequential stream.** <p>This method should be overridden when the {@link #spliterator()}* method cannot return a spliterator that is {@code IMMUTABLE},* {@code CONCURRENT}, or <em>late-binding</em>. (See {@link #spliterator()}* for details.)** @implSpec* The default implementation creates a parallel {@code Stream} from the* collection's {@code Spliterator}.** @return a possibly parallel {@code Stream} over the elements in this* collection* @since 1.8*/default Stream<E> parallelStream() {return StreamSupport.stream(spliterator(), true);}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445137.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

socket阻塞和非阻塞的區別

讀操作 對于阻塞的socket,當socket的接收緩沖區中沒有數據時,read調用會一直阻塞住,直到有數據到來才返 回。當socket緩沖區中的數據量小于期望讀取的數據量時,返回實際讀取的字節數。當sockt的接收緩沖 區中的數據大于期望讀取的字節數時,讀取期望讀取的字節數,返回實際讀…

深度模型壓縮論文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目錄1.摘要和介紹1.1摘要部分2.背景和方法2.1 背景2.2 貢獻2.3 方法3.實驗和結果3.1 實驗3.2 結果4.總結和展望4.1 總結4.2 展望本系列是在閱讀深度神經網絡模型小型化方面論文時的筆記&#xff01;內容大部分從論文中摘取&#xff0c;也會有部分自己理解&#xff0c;有錯誤…

架構分享--微博架構

先來分享下大神Tim Yang的關于微博的架構設計&#xff1a; 這里主要從 存儲和接口角度來講 對于大流量系統的架構設計&#xff0c;對于寫入方面是特別需要注意的&#xff0c;基本上現在遇到的系統都是對于主數據庫的寫入&#xff0c;然后對于從數據庫實現流量的分發。 對于存…

Pytorch(7)-自己設計神經網絡會遇到的問題

操作pytorch架構遇到的問題1.網絡參數初始化2.查看當前可學習參數3.增加可學習的參數4.參數優化函數Adagrad5.直接修改網絡梯度值6.optimizers.zero_grad()報錯7.tensor.detach() 和 tensor.data 的區別1.網絡參數初始化 在pytorch中&#xff0c;有自己默認初始化參數方式&…

Python里的OS模塊常用函數說明

Python的標準庫中的os模塊包含普遍的操作系統功能。如果你希望你的程序能夠與平臺無關的話&#xff0c;這個模塊是尤為重要的。即它允許一個程序在編寫后不需要任何改動&#xff0c;也不會發生任何問題&#xff0c;就可以在Linux和Windows下運行。 下面列出了一些在os模塊中比較…

深度模型壓縮論文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目錄1.摘要和背景1.1 摘要1.2 背景2.方法和貢獻2.1 方法2.1.1 訓練過程2.1.2 loss介紹2.2 貢獻3.實驗和結果3.1 實驗3.2 結果4.總結和展望4.1 總結4.2 展望主要貢獻&#xff1a;基于網絡蒸餾方法&#xff0c;提出了一種提升裁剪后模型的精度的方法&#xff01;將訓練時間大…

關系數據庫——基礎

數據庫系統概論 四個基本概念 數據&#xff1a;數據庫中存儲的基本對象&#xff0c;描述一個事物的符號記錄&#xff0c;數據和其語義不可分開說 數據庫&#xff08;DB&#xff09;&#xff1a;是長期儲存在計算機內、有組織的、可共享的大量數據的集合。 數據庫管理系統&a…

Python(27)-模塊

模塊、包1.模塊導入的方式2.使用as給模塊取一個別名&#xff08;大駝峰命名法&#xff09;3.從模塊中導入部分工具4.從模塊中導入全部工具5.模塊搜索順序6__name__7.包8.發布模塊、安裝模塊、卸載包9.pip安裝第三方模塊本系列博文來自學習《Python基礎視頻教程》筆記整理&#…

Wow6432Node

64 位版本 Windows 中的注冊表分為 32 位注冊表項和 64 位注冊表項。許多 32 位注冊表項與其相應的 64 位注冊表項同名,反之亦然。 64 位版本 Windows 包含的默認 64 位版本注冊表編輯器 (Regedit.exe) 可顯示 64 位和 32 位的 注冊表項。WOW64 注冊表重定向器為 32 位程序提供…

如何使用docker配置深度學習開發環境

文章目錄1.底層驅動的安裝1.1 操作系統的安裝1.2 顯卡驅動的安裝1.3 cuda的安裝2.使用docker配置深度學習開發環境2.1 docker的安裝2.2 nvidia_docker的安裝2.3 安裝過程中的問題2.3.1 docker和nvidia_docker的版本不匹配的問題。2.3.2 解決每次運行docker命令的時候要加sudo.2…

反射全解

反射的概念 反射的引入&#xff1a; Object obj new Student(); 若程序運行時接收到外部傳入的一個對象&#xff0c;該對象的編譯類型是Object&#xff0c;但程序又需要調用該對象運行類型的方法&#xff1a; 1.若編譯和運行類型都知道&#xff0c;使用 instanceof判斷后&…

MachineLearning(4)-核函數與再生核希爾伯特空間

核函數與再生核希爾伯特空間1.支持向量積-核函數2.一個函數為核函數的條件3.核函數與希爾伯特空間3.1希爾伯特空間-Hilbert空間1.支持向量積-核函數 核(kernel)的概念由Aizenman et al.于1964年引入模式識別領域&#xff0c;原文介紹的是勢函數的方法。在那之后&#xff0c;核…

CRegKey 注冊表操作

1.簡介 CRegKey提供了對系統注冊表的操作方法&#xff0c;通過CRegKey類&#xff0c;可以方便的打開注冊表的某個分支或子鍵&#xff08;CRegKey::Open&#xff09;&#xff0c;可以方便的修改一個鍵的鍵值&#xff08;CRegKey::SetValue&#xff09;&#xff0c;也可以查詢某…

進程基礎

進程的基本概念 程序順序執行的特征&#xff1a; 1&#xff09;順序性&#xff1a;處理機嚴格按照程序所規定的順序執行&#xff0c;每一步操作必須在下一步操作開始前執行 2&#xff09;封閉性&#xff1a;程序在封閉的環境下運行&#xff0c;程序獨占資源&#xff0c;資源的狀…

用Docker容器自帶的tensorflow serving部署模型對外服務

相信很多人和我一樣&#xff0c;在試圖安裝tensorflow serving的時候&#xff0c;翻遍了網上的博客和官網文檔&#xff0c;安裝都是以失敗而告終&#xff0c;我也是一樣&#xff0c;這個問題折磨了我兩個星期之久&#xff0c;都快放棄了。幸運的是在同事的建議下&#xff0c;我…

C資源

云風最近寫了一篇博客《C語言的前世今生》。作為長期使用C語言開發網絡游戲服務器的程序員&#xff0c;云風是有理由寫這樣一篇文字&#xff0c;不過還是感覺談的不夠深入&#xff0c;C語言在業界使用的現狀沒有怎么描寫&#xff0c;有些意猶未盡。在這里想比較系統的談談個人對…

學點數學(2)-特征函數

特征函數1.數列特征方程2.矩陣特征方程3.微分方程特征方程4.積分方程特征方程特征方程是為研究相應的數學對象而引入的一些等式&#xff0c;這些等式描述了特定對象的特性。依據研究的對象不同&#xff0c;特征方程包括數列特征方程、矩陣特征方程、微分方程特征方程、積分方程…

GCC如何產生core dump

先決條件1.安裝apport&#xff08;automatically generate crash reports for debugging&#xff09;2.修改/etc/security/limits.conf文件&#xff0c;使允許core dump&#xff0c;或者用ulimit -c unlimited設置core dump文件的大小為unlimited3.C/C的編譯開關-g&#xff08;…

經典的進程同步問題

經典的進程同步問題 普通版&#xff1a;一類進程作為生產者&#xff0c;生產產品&#xff0c;生產的產品放入一個緩沖區&#xff0c;消費者從緩沖區中取出產品&#xff0c;需要保證生產者不可以向滿的緩沖區中添加產品&#xff0c;消費者不可以從空的緩沖區中取出產品。同一時刻…

面試題匯總---深度學習(圖像識別,NLP內容)

文章目錄1.基本概念1.1 為什么神經網絡中深度網絡的表現比廣度網絡表現好&#xff1f;1.2 推導BP算法1.3 什么是梯度消失和梯度爆炸&#xff1f;1.4 常用的激活函數有哪些&#xff1f;1.5 常用的參數更新方法有哪些&#xff1f;1.6 解決過擬合的方法&#xff1f;數據層面模型層…