Java集合类源码学习- Iterabel<T>,Colection<E>,AbstractCollection<E>
Collection<E>接口extends Iteratable<E>接口。
Iteratable<T>:实现接口使得对象能够成为“for-each loop”的目标,T是指iterator返回的元素类型
操作: Iterator<T> iterator() 返回type T的元素的迭代器。
forEach(Cosumer<> superT> action) default意味着没有任何访问修饰符的意思。这个动作提供给出每个元素的操作。
Spliterator<T> spliterator()创造一个由Iterable描述的元素的spliterator
Collection<E>
操作:
基本操作:
元素数量size();
空判断isEmpty();
移除元素:(1)删除特定元素(2)删除特定集合的元素(3)按条件删除(4)保留特定集合内的元素,其余全部删除(5)删除所有元素。
remove(Object o);removeAll(Collection<?> c);removeIf(Predicate<? super E> filter);retainAll(Collection<?> c);clear();
添加元素 add(E e); addAll(Collection<? extends E> c)
包含判断:(1)单个元素判断,(2)集合判断 contains(Object o);containsAll(Collection<?> c); ?类型通配符
集合的相等判断,需要集合hashcode值。
equals(Object o);hashCode();返回集合类的hashcode,重写equal函数则必须重写hashcode函数。
特殊操作:
转换为数组。Object[] toArray() 返回一个包含所有元素的数组。<T> T[] toArray(T[] a);参数为要转换之后的数组要放置的容器。返回数组的运行时类型与指定数组的运行时类型相同。如 果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。
Stream<E> stream(); Stream<E> parallelStream()
AbstractCollection<E> 受保护的构造器
实现的接口中的函数:
contains(Object o):集合中可以添加空元素,当Object为null,必须在集合中找到为Null的元素。虽然null可以作为集合中的元素,但是对象比较时用的是equal函数,而Null对象不能直接调用equal函数,所以必须单独判断。
removeAll(Collection<?> c), retainAll(Collection<?> c); remove(Object o); containsAll(Collection<?> c);addAll(Collection<? extends E> c);clear()
新添加的函数:
Object[] toArray() 将对象返回为Object类的数组。这里考虑了集合的size可能与容器本身的个数不同。collection的元素比size算出的要小则创建新的数组,若比size大,则重新申请一个数组,并且复制r中的元素,然后赋值给r。
T[] toArray(T[] A)(<T>表示这个方法是一个泛型方法,其中泛型参数名为T。)这里考虑了定义的数组A大小可能比应存放的数量(size())要小,因此会运用反射机制创建一个新的类作为返回,但是若发现collection中元素的个数(has.next())其实比a的容量要小,则把目前的元素放入a,然后返回。这个函数在添加对象时会做类型的强制转换,所以是可以支持集合类的类型与T不同。System.arraycopy()与Array.copy()
这里涉及了两个数组复制的方法,Array.copyof()与System.arraycopyof().区别是Array中的赋值借助System中的复制实现,Array返回一个新创建的数组,而System中的copy在给定的数组之间复制。
<T> T[] finishToArray(T[] r, Iterator<?> it)
toString() : 返回[a,b,c]
Iterator<E>提供几个基本操作: hasNext(), next(), remove()(删除迭代器上次返回的元素)
Java集合类源码学习- Iterabel<T>,Colection<E>,AbstractCollection<E>的更多相关文章
- java集合类源码学习二
我们查看Collection接口的hierarchy时候,可以看到AbstractCollection<E>这样一个抽象类,它实现了Collection接口的部分方法,Collection ...
- java集合类源码学习一
对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk ...
- java集合类源码学习三——ArrayList
ArrayList无疑是java集合类中的一个巨头,而且或许是使用最多的集合类.ArrayList继承自AbstractList抽象类,实现了List<E>, RandomAccess, ...
- Java集合类源码解析:Vector
[学习笔记]转载 Java集合类源码解析:Vector 引言 之前的文章我们学习了一个集合类 ArrayList,今天讲它的一个兄弟 Vector.为什么说是它兄弟呢?因为从容器的构造来说,Vec ...
- Java集合类源码解析:HashMap (基于JDK1.8)
目录 前言 HashMap的数据结构 深入源码 两个参数 成员变量 四个构造方法 插入数据的方法:put() 哈希函数:hash() 动态扩容:resize() 节点树化.红黑树的拆分 节点树化 红黑 ...
- Java集合源码学习(一)集合框架概览
>>集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Array ...
- java Integer 源码学习
转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...
- Java集合源码学习(五)几种常用集合类的比较
这篇笔记对几个常用的集合实现,从效率,线程安全和应用场景进行综合比较. >>ArrayList.LinkedList与Vector的对比 (1)相同和不同都实现了List接口,使用类似.V ...
- Java集合类源码解析:ArrayList
目录 前言 源码解析 基本成员变量 添加元素 查询元素 修改元素 删除元素 为什么用 "transient" 修饰数组变量 总结 前言 今天学习一个Java集合类使用最多的类 Ar ...
随机推荐
- .htaccess 基础教程(二)
今天要介绍的:.htaccess的第一个应用是自定义错误页面,这将使你可以拥有自己的.个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没有任何页面.这会让你的网站在出错的时候看上去 ...
- jenkins自动化构建iOS应用配置过程中遇到的问题
最近配置jenkins来自动构建iOS应用,期间遇上不少问题.在这里分享给大家,也给自己留个底,方便下次解决问题. 首先说明下基本情况,我们因为部署jenkins的机器不是Mac,所以不能安装Xcod ...
- jquery.SuperSlide.js只需要调用一个插件就能实现网页大部分特效--推荐
很棒的一个插件,http://www.superslide2.com/
- SpringMVC Controller介绍
SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...
- Android 如何在 ListView 中更新 ProgressBar 进度
=======================ListView原理============================== Android 的 ListView 的原理打个简单的比喻就是: 演员演 ...
- nginx 服务器重启命令,关闭
nginx -s reload :修改配置后重新加载生效 nginx -s reopen :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是 ...
- C# 使用 StructLayoutAttribute 时 C# /C++ 内存空间分配与成员对齐问题
1. 使用场景 公共语言运行时控制数据字段的类或结构在托管内存中的物理布局.但是,如果想要将类型传递到非托管代码,需要使用 StructLayout 属性. 2. 内存分配问题. 如果不显示的设置内存 ...
- cf593c
题意:有n(n<=50)个圆,给出每个圆的圆心坐标和半径r(r>=2). 求两个函数f(t),g(t),t的取值为0到50的整数,每次令x=f(t),y=g(t),产生一个51个点的集合. ...
- Mybatis 复习 Mybatis 配置 Mybatis项目结构
pom.xml文件已经贴在了文末.该项目不使用mybatis的mybatis-generator-core,而是手写Entities类,DaoImpl类,CoreMapper类 其中,Entities ...
- ubuntu wifi连接不上或经常断网,重启就好
问题1.知道wifi密码,驱动也有,可以点击连接,总是提示"连接断开,您现在处于离线状态". 1.打开终端"ctrl+alt+T" 2.输入: sudo vim ...