Iterable与Collection源码学习
2019-11-25 16:05:37来源:博客园 阅读 ()
Iterable与Collection源码学习
接口 - 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();
原文链接:https://www.cnblogs.com/heaven-elegy/p/11929022.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 你说研究过Spring里面的源码,循环依赖你会么? 2020-06-09
- 通俗理解spring源码(六)—— 默认标签(import、alias、be 2020-06-07
- 用斗地主的实例学会使用java Collections工具类 2020-06-05
- 学习源码的第八个月,我成了Spring的开源贡献者 2020-06-02
- java 在线网络考试系统源码 springboot mybaits vue.js 前后 2020-05-31
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash