iterable java_java 集合框架(二)Iterable接口
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接口相关推荐
- 第19章 集合框架(3)-Map接口
第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...
- Java集合框架之四大接口、常用实现类,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- java集合框架的接口_Java集合框架之Collection接口详解
Java是一门面向对象的语言,那么我们写程序的时候最经常操作的便是对象了,为此,Java提供了一些专门用来处理对象的类库,这些类库的集合我们称之为集合框架.Java集合工具包位于Java.util包下 ...
- java之集合框架一Collection接口
1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是 ...
- Java学习关于集合框架的基础接口--Collection接口
集合框架(Collection Framework)是Java最强大的子系统之一,位于java.util 包中.集合框架是一个复杂的接口与和类层次,提供了管理对象组的最新技术.Java集合框架标准 ...
- Java集合框架及基本接口
文章目录 Collection接口及迭代器 泛型方法的使用 集合基本接口和实现 List ArrayList LinkedList ListIterator接口和Iterable接口的区别 Set H ...
- java集合框架栈_自己实现集合框架(九):栈接口
这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
最新文章
- 巨人也能身手敏捷?看美国KeyBank的实战经验
- PHP设计模式 -- 策略模式
- linux下使用sftp
- 容器的访问元素的成员函数(front,back,下标和at)返回的都是引用
- go语言 sync.map遍历时删除可以全部删除
- [CF1442 D] Sum(分治优化dp + 结论)
- JavaWeb应用配置文件安全解决方案
- flume从指定网络端口采集数据输出到控制台
- python中mat函数_Python中flatten( )函数及函数用法详解
- 对vuex在项目中的使用
- ubuntu使用git时,终端不显示git分支。
- 市场大幅逆转速度达史上最快 宏观交易领域也被机器“占领”
- 心情随笔(一):五月随笔满满的正能量
- 从零开始做单相逆变电源(软件)
- Unity一键发包工具
- 在校生学习云计算HCIE难吗?好就业吗?
- MEM/MBA英语基础(06)复合句-名词性从句
- 【嵌入式开发】Raspberry Pi 树莓派性能测试
- 苹果手机注册时显示链接服务器出现问题,苹果确认iphone密码,显示连接服务器出现问题,为什么...
- textarea 中的内容自动换行
热门文章
- APP嵌入手机拍照银行卡识别接口,实现快速绑定银行卡号
- java遍历jsonobject_jsonobject 遍历取值
- SAT句子填空题10个示例及答案
- android时钟小程序,超详细,用canvas在微信小程序上画时钟教程
- python之流程图和思维导图
- 首发|Clusterpedia 0.1.0 四大重要功能
- 鸿蒙哪些机型可以用,鸿蒙系统可以在哪些手机上使用 鸿蒙系统升级名单
- 分离扫描文档方法(2) —— Dynamic Web TWAIN:如何使用条码/二维码作为扫描文档的分隔器
- vhd win10系统蓝屏问题(inaccessible boot device/0x000000c1)
- linux设备驱动归纳总结(三):6.poll和sellct