接口 - Iterable<T> - 可迭代

描述

实现本接口的类,其对象可以被迭代.同时支持forEach语法

方法

Iterator<T> iterator()

类型

抽象方法

描述

返回一个用于执行迭代的java.util.Iterator对象

代码

Iterator<T> iterator();

default void forEach(Consumer<? super T> action)

类型

抽象默认方法

描述

遍历所有元素并分别传递给action方法

代码

default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}

default Spliterator<T> spliterator()

类型

抽象默认方法

描述

返回一个Spliterator<T>对象

代码

default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}

接口 - Collection<E>

继承

Iterable

实现

描述

规定了所有集合需要实现的方法

方法

int size()

类型

抽象方法

描述

返回当前集合的元素数量.当超过Integer.MAX_VALUE时,返回Integer.MAX_VALUE.

代码

int size();

isEmpty()

类型

抽象方法

描述

当前集合中不包含任何元素时,返回true

代码

boolean isEmpty();

contains(Object o)

类型

抽象方法

描述

当前集合中包含一个或以上的指定元素时,返回true.否则返回false

代码

boolean contains(Object o);

toArray()

类型

抽象方法

描述

返回一个包含当前集合中所有元素的数组.如果当前集合是有序集合,则这个数组中的元素顺序应该与此有序集合中的顺序相同.

同时,返回的数组必须是一个新端的数组.可以让调用者自由的修改返回数组的结构.而不影响本集合.

代码

Object[] toArray();

toArray(T[] a)

类型

抽象方法

描述

toArray()相似.返回数据类型使用运行时类型(也就是这里的T).

当参数a可以容纳当前集合中的元素时,此方法会将当前集合内的元素放入参数a中,并在防止最后一个元素的再后面的一个位置设置为null.

当参数a无法容纳当前集合中的元素时,会返回一个新数组

代码

<T> T[] toArray(T[] a);

add(E e)

类型

抽象方法

描述

添加元素到当前集合中.当集合被修改时,将会返回true.否则返回false

在源码的注释中,提到了对于null,重复元素,与一些特殊情况下的处理措施.如不再返回false而是抛出异常等.这要看具体的实现了.

代码

boolean add(E e);

remove(Object o)

类型

抽象方法

描述

删除集合中的指定元素.当集合被更改时,返回true

代码

boolean remove(Object o);

containsAll(Collection<?> c)

类型

抽象方法

描述

给定集合中的所有元素均在当前集合中存在时,返回true

代码

boolean containsAll(Collection<?> c);

addAll(Collection<? extends E> c)

类型

抽象方法

描述

添加给定集合中的全部元素到当前集合中

这里源码注释中提出了一些为确认的情况.

  • 参数c在操作中被改变(这里一般是多线程共用一个对象时引起的).
  • 参数c就是当前集合(OOM~).

代码

boolean addAll(Collection<? extends E> c);

removeAll(Collection<?> c)

类型

抽象方法

描述

删除当前集合中的出现在参数c集合中的全部元素

代码

boolean removeAll(Collection<?> c);

removeIf(Predicate<? super E> filter)

类型

抽象默认方法

描述

根据Predicate(断言),删除全部元素

这里直接使用iterator(),进行迭代,断言,删除操作

代码

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;
}

retainAll(Collection<?> c)

类型

抽象方法

描述

删除掉当前集合中,不包含在参数c集合中的全部元素

代码

boolean retainAll(Collection<?> c);

clear()

类型

抽象方法

描述

清除集合中的全部元素

代码

void clear();

equals(Object o)

类型

抽象方法

描述

以重写的方式,将java.lang.Object.equals方法设置为抽象方法.约束子类实现equals方法

代码

boolean equals(Object o);

hashCode()

类型

抽象方法

描述

以重写的方式,将java.lang.Object.hashCode方法设置为抽象方法.约束子类实现hashCode方法

代码

int hashCode();

Iterable与Collection源码学习的更多相关文章

  1. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  2. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

  3. JDK源码学习系列05----LinkedList

                                             JDK源码学习系列05----LinkedList 1.LinkedList简介 LinkedList是基于双向链表实 ...

  4. JDK源码学习系列04----ArrayList

                                                                             JDK源码学习系列04----ArrayList 1. ...

  5. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  6. Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签

    写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Docum ...

  7. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  8. 【 js 基础 】【 源码学习 】源码设计 (更新了backbone分析)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析 第二部分:unders ...

  9. Asp.NetCore源码学习[2-1]:日志

    Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...

随机推荐

  1. 三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员#

    2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上给的信号),或者是学习些什么,更有利于将来的职业发展吧,哈哈哈.工 ...

  2. Java-手动搭建SSH

    项目搭建工具:eclipse 项目开发环境:①Windows10-64位 ②Tomcat 8.5 ③jdk1.8.0_91 ④MySql 8.0.11 jar包准备:这里不详说,自己准备不不冲突能跑起 ...

  3. 基于串口通信做my_printf时遇到的坑儿

    首先,完成了串口向终端putty的打印函数ConsolePrint(),但该函数只能打印字符串,无法像stdio库中的printf函数一样打印整数和浮点数等. 因此,我先是使用了标准库stdio中的s ...

  4. Redis 命令执行过程(上)

    今天我们来了解一下 Redis 命令执行的过程.在之前的文章中<当 Redis 发生高延迟时,到底发生了什么>我们曾简单的描述了一条命令的执行过程,本篇文章展示深入说明一下,加深读者对 R ...

  5. SpringMvc commons-fileupload图片/文件上传

    简介 SpringMvc文件上传的实现,是由commons-fileupload这个jar包实现的. 需求 在修改商品页面,添加上传商品图片功能. Maven依赖包 pom.xml <!-- 文 ...

  6. unrecognized selector sent to class 0x10a4ce490 我躺过的坑

    错误现象:unrecognized selector sent to class 0x102265ad8’ 错误原因: Other Linker Flags 链接设置错误导致类扩展不知道如何正确读取, ...

  7. 带你从头到尾捋一遍MySQL索引结构(2)

    前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结.索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家. 这篇博客我会谈谈对于索引结构我自己的看法,以 ...

  8. Openfiler存储搭建

    说明: Openfiler是一个基于Linux的开源免费网络存储管理操作系统,通过WEB界面对存储磁盘进行管理,支持iSCSI.NFS 等网络存储协议. 目前最新版本:openfileresa-2.9 ...

  9. C#异步编程看这篇就够了

    随着.NET Core的流行,相信你现在的代码中或多或少的会用到async以及await吧!毕竟已成标配.那么我们为什么要用async以及await呢?其实这是微软团队为我们提供的一个语法糖,让我们不 ...

  10. 关于OV7670摄像头的分辨率设置

    关于OV7670摄像头的分辨率设置最近一直在纠结如何把OV7670输出的图片分辨率缩小,以减少数据量来适应数据的传输,在网上看了好多也没有关于寄存器的具体设置,最终又读了几遍数据手册,加上网友们写的帖 ...