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.mzph.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;数据层面模型层…