开发者社区> yuanrengu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

JDK1.7源码分析01-Collection

简介: 同步发布:http://www.yuanrengu.com/index.php/20180221.html Java的集合类主要由两个接口派生而出:Collection和Map。Collection是一个接口,它主要的两个分支为List和Set,Map的介绍会在后面的系列中进行详细的分析。
+关注继续查看

同步发布:http://www.yuanrengu.com/index.php/20180221.html

Java的集合类主要由两个接口派生而出:Collection和Map。Collection是一个接口,它主要的两个分支为List和Set,Map的介绍会在后面的系列中进行详细的分析。如下图所示为Collection接口、子接口及其实现类的继承树。

源码分析如下:

package java.util;

/**
 * Collection继承了迭代器的接口,即整个集合类都采用了迭代器模式
 */
public interface Collection<E> extends Iterable<E> {
    // Query Operations

    /**
     * 返回集合的大小。
     * 如果集合的大小超过Integer.MAX_VALUE,则返回Integer.MAX_VALUE
     */
    int size();

    /**
     * 判断集合是否为空
     */
    boolean isEmpty();

    /**
     * 判断集合中是否有元素o。
     * 这里要特别注意下元素o是否与集合里的元素类型兼容,以及o是否为null
     */
    boolean contains(Object o);

    /**
     * 返回集合中元素的迭代器,但不能保证返回顺序(除非集合指定了顺序)
     */
    Iterator<E> iterator();

    /**
     * 返回一个数组(包含集合中所有的元素)。
     * 如何集合中的元素是有序的,则返回的数组中的元素也是有序的。
     * 这个方法可用于集合与数组之间的转换
     */
    Object[] toArray();

    /**
     * 以数组形式返回指定数组类型的集合元素
     */
    <T> T[] toArray(T[] a);

    // Modification Operations

    /**
     * 用于向集合里添加元素
     * 如果集合对象被添加操作改变了则返回true
     */
    boolean add(E e);

    /**
     * 删除元素
     */
    boolean remove(Object o);

    // Bulk Operations

    /**
     * 用来判断是否含有指定集合c中的所有元素
     */
    boolean containsAll(Collection<?> c);

    /**
     * 将指定集合c中的所有元素添加至调用者的集合中
     */
    boolean addAll(Collection<? extends E> c);

    /**
     * 删除集合中所包含的c里面的元素
     */
    boolean removeAll(Collection<?> c);

    /**
     * 保留与集合c中相同的元素(即移除与指定集合不同的元素)
     * 相当于把调用该方法的集合变成该集合和集合c的交集
     */
    boolean retainAll(Collection<?> c);

    /**
     * 清除集合里的所有元素,集合长度变为0
     */
    void clear();


    // Comparison and hashing

    /**
     * 判断与指定元素是否相等
     */
    boolean equals(Object o);

    /**
     * 返回集合的哈希码值
     */
    int hashCode();
}

Collection继承了Iterable,如图所示:

Iterable源码分析如下:

/**
 * 迭代器接口
 */
public interface Iterable<T> {

    /**
     * 返回元素类型为T的迭代器
     */
    Iterator<T> iterator();
}

其中Iterator的源码如下:

/**
 * 迭代器接口类
 */
public interface Iterator<E> {

    /**
     * 如果被迭代的集合元素还没有被遍历,则返回true
     */
    boolean hasNext();

    /**
     * 返回集合里的下一个元素
     */
    E next();

    /**
     * 删除集合里上一次next方法返回的元素
     */
    void remove();
}

Iterator仅用于遍历集合,Iterator本身并不提供装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。Iterator必须依附于Collection对象,如有一个Iterator对象,则必然有一个与之关联的Collection对象。特别要注意的是,当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何影响。  

 

  

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
再次搞定 Ali 云函数计算 FC
原本早就该写完了微信 SDK 授权服务上云计划由于对 Ali 云函数计算 FC 的不熟悉遇到了很多的坑,再前面的文章中还吐槽了一通。在服务顺利跑通后,这回实打实的来总结一下顺利上云的保守指南~
22857 0
特稿|过去5年,阿里云是如何打造云原生数据库PolarDB的
阿里云在云原生数据库领域的自研创新突围。
23408 0
如何优雅的消除系统重复代码
在程序猿的日常工作中,不仅要跟随业务侧的发展不断开发新的需求,同时也需要维护老的已有平台。无论是开发新需求还是维护老系统,我们都会遇到同样一个问题,系统中总是充斥着很多重复的代码。
23813 0
初识Serverless函数计算
Serverless 并不是没有服务器,而是开发者不再需要关心服务器。在传统 Serverful 架构下,部署一个应用需要购买服务器,部署操作系统,搭建开发环境,编写代码,构建应用,部署应用,配置负载均衡机制,搭建日志分析与监控系统,应用上线后,继续监控应用的运行情况。而在 Serverless 架构下,开发者只需要关注应用的开发构建和部署,无需关心服务器相关操作与运维,在函数计算架构下,开发者只需要编写业务代码并监控业务运行情况。这将开发者从繁重的运维工作中解放出来,把精力投入到更有意义的业务开发上。
24399 0
【AI征文】对DeepRec认识以及了解
对DeepRec认识以及了解
57473 0
Tensorflow Serving部署模型与调用
本文以mnist为数据集,使用keras 构建CNN网络,将训练获取的模型通过Tensorflow Serving方式部署提供Rest Full接口,分别使用PostMan和Python调用服务,代码编辑调试使用阿里云PAI DSW实例,模型部署使用阿里云ECS虚拟机。
6048 0
业务中台之上的低代码应用开发平台
中台低代码平台帮助开发者掌握全栈能力,促进开发者提高工作效率,基于企业数字化业务能力组件,可以实现业务应用的敏捷按需装配,成为企业组装式应用创新平台,进而实现企业业务能力的持续优化和复用,促进从组织到企业甚至行业的业务能力集约与创新。
101023 0
十分钟生成影视级室内设计效果,红星美凯龙设计云如何升级传统家居行业
依托于阿里云强大的弹性云上GPU算力,红星美凯龙可以为客户提供快速的、高质量的渲染,实现秒级的门店快速设计。
65951 0
+关注
529
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载