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>的更多相关文章

  1. java集合类源码学习二

    我们查看Collection接口的hierarchy时候,可以看到AbstractCollection<E>这样一个抽象类,它实现了Collection接口的部分方法,Collection ...

  2. java集合类源码学习一

    对于java的集合类,首先看张图 这张图大致描绘出了java集合类的总览,两个体系,一个Collection集合体系一个Map集合体系.在说集合类之前,先说说Iterable这个接口,这个接口在jdk ...

  3. java集合类源码学习三——ArrayList

    ArrayList无疑是java集合类中的一个巨头,而且或许是使用最多的集合类.ArrayList继承自AbstractList抽象类,实现了List<E>, RandomAccess, ...

  4. Java集合类源码解析:Vector

    [学习笔记]转载 Java集合类源码解析:Vector   引言 之前的文章我们学习了一个集合类 ArrayList,今天讲它的一个兄弟 Vector.为什么说是它兄弟呢?因为从容器的构造来说,Vec ...

  5. Java集合类源码解析:HashMap (基于JDK1.8)

    目录 前言 HashMap的数据结构 深入源码 两个参数 成员变量 四个构造方法 插入数据的方法:put() 哈希函数:hash() 动态扩容:resize() 节点树化.红黑树的拆分 节点树化 红黑 ...

  6. Java集合源码学习(一)集合框架概览

    >>集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Array ...

  7. java Integer 源码学习

    转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...

  8. Java集合源码学习(五)几种常用集合类的比较

    这篇笔记对几个常用的集合实现,从效率,线程安全和应用场景进行综合比较. >>ArrayList.LinkedList与Vector的对比 (1)相同和不同都实现了List接口,使用类似.V ...

  9. Java集合类源码解析:ArrayList

    目录 前言 源码解析 基本成员变量 添加元素 查询元素 修改元素 删除元素 为什么用 "transient" 修饰数组变量 总结 前言 今天学习一个Java集合类使用最多的类 Ar ...

随机推荐

  1. Shell入门教程:流程控制(5)for 循环

    for循环的运作方式,是将 串行 的元素的元素一一取出,依序放入制定的变量中,然后重复执行含括的命令区域(在 do 与 done 之间),直到所有元素取尽为止. 其中,串行是一些字符串的组合,彼此用 ...

  2. Linux 执行文件查找命令 which 详解

    某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which  查看可执行文件的位置 whereis 查看文件的位置 locate   配合数据库查看文件位置 find   实际搜寻硬盘查 ...

  3. C/C++内存、指针问题

    转 http://wenku.baidu.com/link?url=tN9Fac-XyB2F7V7xwYcRclu464G2c8ybYMBxNXbBGQJXEEy0vJxTOzcAeVrFrqYLfj ...

  4. Android多线程通信机制

    掌握Android的多线程通信机制,我们首先应该掌握Android中进程与线程是什么. 1. 进程 在Android中,一个应用程序就是一个独立的进程(应用运行在一个独立的环境中,可以避免其他应用程序 ...

  5. PHP的单态类——为了产生唯一的对象

    pdo就是使用了单态类,使得对象永远只实例化一次,减少了内存消耗. 单态类: <?php class A{ private static $a = null; private function ...

  6. ecshop商品子分类点击下拉,子分类空时,直接跳转功能

    模板文件循环读取商品分类,并给大分类加上url属性.然后在js中判断是否有下级分类.有分类则点击下拉效果,没有子分类则跳转到url属性的链接去. themes/**/library/category_ ...

  7. 昨天开发引入的两个错误--Parcelable

    以下的代码有两处明显的错误,一不小心就会写出如下错误的代码,其中第2个问题调试起来很麻烦: 1 public class AddedBannerInfo implements Parcelable { ...

  8. mysql事务和锁InnoDB

    背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题.我在工作过程中,经常会有同事咨询这方面的问题.同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题.本文,准备 ...

  9. JMeter遇到的问题一:Error writing to server(转)

    Java.io.IOException: Error writing to server异常:我测试500个并发时,系统没有问题:可当我把线程数加到800时,就出现错误了,在"查看结果树&q ...

  10. python笔记1:python函数的使用

    一.函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数: str:要计算的字符串.列表.字典.元组等 4:返回值:字符串.列表.字典.元组等元素的长度 ...