• iterator与collection:容器的起源
    • iterator的简要介绍

    • Collection的简要介绍
      • 基本特性
      • 方法
        关于容器

        java中有许多有用的容器,比如说Set,广泛使用的ArrayList,这些容器使用的非常广泛
        所有这些容器都是直接或间接源于一个接口:Collection
        (不是Collections)

        iterator与collection:容器的起源

        容器是java的一个非常重要的组成部分,几乎处处都会用到。

        iterator的简要介绍

        java当中有两个与容器迭代有关的接口,iterable与iterator,这两个接口实现了容器中的迭代功能。从《java编程思想》p459中的容器继承关系图中可以看出:

        Iterator是所有容器的基础。
        可以这样来考虑:java中的容器,包括set,list,map等等,其最基本的属性就是可迭代,先实现了迭代的接口,然后才根据各自的功能进行补全。

        iterable

        iterable顾名思义,就是表示实现了这个接口的类都是可迭代的,iterable的主要用处就是提供类型的iterator,以及使任何实现了这个接口的类都能够使用forEach语句进行迭代
        iterable的官方文档如下:
        https://docs.oracle.com/javase/9/docs/api/java/lang/Iterable.html

        iterator

        iterator就是容器的迭代器,容器对我们封装了内部实现,作为补偿,每种容器都可以通过其内部的迭代器进行迭代。
        iterator的官方文档如下:
        https://docs.oracle.com/javase/9/docs/api/java/util/Iterator.html

        iterator接口中提供了四个方法,分别是:

        default void forEachRemaining(consumer<? super E> action);

        (我也不知道这个方法的具体含义)

        以及

        Boolean hasNext();
        E next();
        default void remove();

        这三个方法就是我们常用来对容器进行迭代的了。
        其中hasNext() 就是判断是否还有剩余元素没有被迭代访问,而next()方法就是返回当前的迭代器所指向的位置的接下来一个元素的引用。
        第三个方法remove()需要注意
        这个方法是将next()所指向的元素移除,对每一个next()指向,只能调用一次这个方法

        关于remove方法

        如果一个正在迭代中的collection通过除remove方法之外的途径被修改了,那么一个iterator的行为是未定义的,可能会产生许多匪夷所思的结果。除非子类覆盖了这个方法并给出了确定的行为。
        同样的,如果在使用了forEachRemaining方法之后调用remove方法,其结果也是未定义的

        Collection的简要介绍

        源代码中对collection的定义是这样的:

        public interface Collection<E> extends Iterable<E>

        iterator是容器的最基本最抽象的性质——可迭代
        而collection则对其稍微具体地完善了一下:collection代表了一组可迭代的对象
        在collection接口没有给出其它具体的要求,所以一个collection可以有各种不同的实现方式,比如说set与list就是两种不同的实现,能够分别满足不同的功能要求。
        collection的官方文档如下:
        https://docs.oracle.com/javase/9/docs/api/java/util/Collection.html

        基本特性

        • 所有对collection的实现都必须至少包含两种构造方法:一种不包含参数,直接创建一个空的对象。而另一种则含有一个collection类型的参数,该构造方法创建一个对象,并将参数的collection内的对象全都拷贝进来。对于这一点,没有任何强制性的限定,如果要亲自写一个新的collection的话,要不要实现这两种构造器全看程序员的心情
        • collection中包含可选操作,具体描述可以参考《java编程思想》-17.4-可选操作,简要来说,就是在对collection的implements中,可以不用实现所有的方法,比如说remove,是可以不要的,如果不嫌麻烦的话
        • collection的implement有时候会对其内部的元素进行限定,比如说不能为null,或者不能含有重复元素

        方法

        虽然java没有对collection接口的具体形式作出任何限制,但是通过接口里面的一大堆方法,可以知道一个collection所至少需要具备的功能:
        (只列举了一部分)

        • int size() 返回collection中的元素个数
        • boolean isEmpty() 是否为空
        • boolean contains(Object o) 是否包含o对象
        • boolean containsAll(Collection<?> c) 是否包含c collection中的所有对象
        • Iterator iterator() 返回为该collection量身定制的迭代器
        • Object[] toArray() 将collection转化为一个对象的数组
        • boolean add(E e) 添加一个e元素
        • boolean addAll(Collection<? Extends E> c) 添加一堆元素
        • boolean remove(Object o) 删除一个o对象
        • boolean removeAll(Collection<?> c) 删除一堆元素
        • void clear() 清空,让我们从头开始
        • boolean equals(Object o) 关于等价的判断
        • int hashCode() 返回哈希值

        理解java容器:iterator与collection,容器的起源的更多相关文章

        1. 理解java集合——集合框架 Collection、Map

          1.概述: @white Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中. 2.Java集合大致可以分4类: @white Set ...

        2. 深入理解Java中的Garbage Collection

          前提 最近由于系统业务量比较大,从生产的GC日志(结合Pinpoint)来看,需要对部分系统进行GC调优.但是鉴于以往不是专门做这一块,但是一直都有零散的积累,这里做一个相对全面的总结.本文只针对Ho ...

        3. Java collection 容器

          http://www.codeceo.com/article/java-container-brief-introduction.html Java实用类库提供了一套相当完整的容器来帮助我们解决很多具 ...

        4. java容器-Iterator

          1介绍 java中的容器主要是Collection<E>的子类型,即都实现了Iterable<E>接口,即使是Map类型,也有entrySet方法可以获得该Map的所有元素组成 ...

        5. 理解java容器底层原理--手动实现HashMap

          HashMap结构 HashMap的底层是数组+链表,百度百科找了张图: 先写个链表节点的类 package com.xzlf.collection2; public class Node { int ...

        6. Java 集合深入理解(3):Collection

          点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情有点粉,来学学 Collection 吧! 什么是集合? 集合,或者叫容器,是一个包含多个元素的对象: 集合可以对 ...

        7. 我所理解Java集合框架的部分的使用(Collection和Map)

          所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...

        8. 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

          两个月之前准备软考时,简单的从理论上总结了最经常使用的数据结构和算法,比方:线性表,链表,图.在进行java开发时,jdk为我们提供了一系列对应的类来实现主要的数据结构.jdk所提供的容器API位于j ...

        9. Java编程思想之十七 容器深入研究

          17.1 完整的容器分类方法 17.2 填充容器 import java.util.*; class StringAddress { private String s; public StringAd ...

        随机推荐

        1. Django知识总结(一)

          壹 ● 有关http协议 一 ● 全称 超文本传输协议(HyperText Transfer Protocol) 二 ● 协议 双方遵循的规范 http协议是属于应用层的协议(还有ftp, smtp等 ...

        2. 分析logfilter+session

          1.P132分析: long before = System.currentTimeMillis(); //返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1 ...

        3. WordCount优化版测试小程序实现

          Github地址:https://github.com/hcy6668/wordCountPro.git PSP表格: PSP  PSP阶段  预估耗时(小时)  实际耗时(小时)  Planning ...

        4. Jmeter性能结果分析

          1.压测结果指标 Samples:表示一共发出的请求数 Average:平均响应时间,默认情况下是单个Request的平均响应时间(ms) Error%:测试出现的错误请求数量百分比.若出现错误就要看 ...

        5. Beta冲刺 4

          前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10123035.html 作业博客:https://edu.cnblogs.com/campus ...

        6. 2018-CVTE中央研究院-自然语言处理算法工程师-电话初面问题

          楼主NLP初学者一名,有幸参加2018年CVTE中央研究院自然语言处理电话面试,问题总结如下: 1.详细的介绍自己的学术论文(感觉他们非常重视这块),会问你网络的具体构造,注意力机制如何计算以及为何你 ...

        7. Java学习——方法

          在这一次的学习中我觉得首先要了解: 什么是方法呢 方法又怎么定义与调用 上面这段代码是我们经常写到的,其实它就是一个方法,其中 public 是修饰符 void是返回值类型 main就是方法名 arg ...

        8. 宝塔面板安装SSL证书

          2016年阿里云与国内证书颁发机构天威诚信推出了基于Symantec(赛门铁克)的免费SSL证书,有需要免费SSL证书产品的可以前往阿里云进行申请. 申请地址:阿里云云盾证书服务—Symantec免费 ...

        9. 注意&&前后两个表达式有顺序的差别

          //插入排序 public static void insertSort(int[] arr) { // 遍历所有数字 for (int i = 1; i < arr.length; i++) ...

        10. crontab下git命令无效

          原因 crontab默认的 path  设置和系统自身的有区别 git 命令放在 /usr/local/bin/ 目录 whereis git 而crontab 却在  /sbin:/bin:/usr ...