Iterable接口是java 集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素,我们可以看下它的成员方法

修饰符和返回值

方法名

描述

Iterator

iterator()

返回一个内部元素为T类型的迭代器

default void

forEach(Consumer super T> action)

对内部元素进行遍历,并对元素进行指定的操作

default Spliterator

spliterator()

创建并返回一个可分割迭代器

Iterable最早出现在JDK 1.5,开始只有iterator()一个抽象方法,需要子类来实现一个内部迭代器Iterator遍历元素.后两个方法是Java 8后新添加的,forEach(Consumer action)是为了方便遍历操作集合内的元素,spliterator()则提供了一个可以并行遍历元素的迭代器,以适应现在cpu多核时代并行遍历的需求.

其中我们可以看下default修饰符,这也是Java 8后新出现的,我们知道,如果我们给一个接口新添加一个方法,那么所有他的具体子类都必须实现此方法,为了能给接口拓展新功能,而又不必每个子类都要实现此方法,Java 8新加了default关键字,被其修饰的方法可以不必由子类实现,并且由dafault修饰的方法在接口中有方法体,这打破了Java之前对接口方法的规范.

下面是使用迭代器进行遍历的例子

public classIterableTest {public static voidmain(String[] args) {

iteratorCase();

}public static voiditeratorCase(){

List list=new ArrayList();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

Iterator iterator=list.iterator(); //获取ArrayList内部迭代器

while(iterator.hasNext()){ //hasNext()方法判断是否还有元素

System.out.println(iterator.next()); //next()返回当前元素,并且将指针移向下个元素

}

}

}

此外我们还可以使用"for-each loop"形式进行遍历,增强for形式在Java中只是一个语法糖,实际编译的时候,还是会转换为迭代器形式,上面方法体可以改成

for(Integer integer : list) {

System.out.println(integer);

}

进行迭代遍历的时候我们需要注意这种情况,就是在遍历的过程中,如果我们对元素进行添加删除,那么会造成并行修改异常(ConcurrentModificationException),如下

Iterator iterator =list.iterator();while(iterator.hasNext()) {

Integer i=iterator.next();if (i == 2) {

list.remove(i);

}

}

对于这种情况,,我们应当使用迭代器Iterator内部的remove()方法,而不是使用集合list直接删除元素,正确写法为

Iterator iterator =list.iterator();while(iterator.hasNext()) {

Integer i=iterator.next();if (i == 2) {

iterator.remove();//使用迭代器进行删除元素,注意这里remove()没有参数,它是直接删除当前迭代的元素

}

}

如果我们自己想自己写一个集合,实现Iterable接口,并可以使用"for-each loop"形式遍历,那么我们需要自己来重写一个迭代器(Iterator)并返回它,看下面代码

public class MyCollection implements Iterable{

@OverridepublicIterator iterator() {return newMyIterator();

}private class MyIterator implements Iterator{

@Overridepublic booleanhasNext() {return false;

}

@OverridepublicE next() {return null;

}

}

}

这样就可以使用"for-each loop"的形式进行遍历

iterable java_java 集合框架(二)Iterable接口相关推荐

  1. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  2. Java集合框架之四大接口、常用实现类,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. java集合框架的接口_Java集合框架之Collection接口详解

    Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...

  4. java之集合框架一Collection接口

    1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是 ...

  5. Java学习关于集合框架的基础接口--Collection接口

     集合框架(Collection  Framework)是Java最强大的子系统之一,位于java.util 包中.集合框架是一个复杂的接口与和类层次,提供了管理对象组的最新技术.Java集合框架标准 ...

  6. Java集合框架及基本接口

    文章目录 Collection接口及迭代器 泛型方法的使用 集合基本接口和实现 List ArrayList LinkedList ListIterator接口和Iterable接口的区别 Set H ...

  7. java集合框架栈_自己实现集合框架(九):栈接口

    这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...

  8. JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类

    一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...

  9. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

最新文章

  1. 巨人也能身手敏捷?看美国KeyBank的实战经验
  2. PHP设计模式 -- 策略模式
  3. linux下使用sftp
  4. 容器的访问元素的成员函数(front,back,下标和at)返回的都是引用
  5. go语言 sync.map遍历时删除可以全部删除
  6. [CF1442 D] Sum(分治优化dp + 结论)
  7. JavaWeb应用配置文件安全解决方案
  8. flume从指定网络端口采集数据输出到控制台
  9. python中mat函数_Python中flatten( )函数及函数用法详解
  10. 对vuex在项目中的使用
  11. ubuntu使用git时,终端不显示git分支。
  12. 市场大幅逆转速度达史上最快 宏观交易领域也被机器“占领”
  13. 心情随笔(一):五月随笔满满的正能量
  14. 从零开始做单相逆变电源(软件)
  15. Unity一键发包工具
  16. 在校生学习云计算HCIE难吗?好就业吗?
  17. MEM/MBA英语基础(06)复合句-名词性从句
  18. 【嵌入式开发】Raspberry Pi 树莓派性能测试
  19. 苹果手机注册时显示链接服务器出现问题,苹果确认iphone密码,显示连接服务器出现问题,为什么...
  20. textarea 中的内容自动换行

热门文章

  1. APP嵌入手机拍照银行卡识别接口,实现快速绑定银行卡号
  2. java遍历jsonobject_jsonobject 遍历取值
  3. SAT句子填空题10个示例及答案
  4. android时钟小程序,超详细,用canvas在微信小程序上画时钟教程
  5. python之流程图和思维导图
  6. 首发|Clusterpedia 0.1.0 四大重要功能
  7. 鸿蒙哪些机型可以用,鸿蒙系统可以在哪些手机上使用 鸿蒙系统升级名单
  8. 分离扫描文档方法(2) —— Dynamic Web TWAIN:如何使用条码/二维码作为扫描文档的分隔器
  9. vhd win10系统蓝屏问题(inaccessible boot device/0x000000c1)
  10. linux设备驱动归纳总结(三):6.poll和sellct