Iterator接口,翻译成中文是迭代器

迭代器的概念通俗解释:

java中有很多的集合,内部有各种存储方法,取出的方式也各不相同,是否可以有一种通用的方式来获取呢?

这种方式类似for循环遍历,

通用获取方式:取出元素之前判断集合中有没有这个元素,如果有,就取出来;继续判断,如果还存在那么继续取出,直到全部取出为止,这种取出就是迭代

迭代器的实现:

(将ArrayList集合换成其他的集合,也可以实现)

package demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class IteratorDemo {
public static void main(String[] args) {
Collection<String>c1 = new ArrayList<String>();
c1.add("abc1");
c1.add("abc2");
c1.add("abc3");
c1.add("abc4");
Iterator<String> it1 = c1.iterator();
boolean b1 = it1.hasNext();//是否有元素可以被取出
System.out.println(b1);//true
//获取元素
while(it1.hasNext()){
String s = it1.next();
System.out.println(s);
}
}
}

集合迭代中的转型:
建议加入类型,但是不加入也可以执行:

package demo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class CollectionDemo {
public static void main(String[] args) {
//集合可以存储任意类型的对象
//集合中,不指定存储的数据类型,也可以存储
Collection c1 = new ArrayList();
c1.add("abc");
c1.add("def");
Iterator it1 = c1.iterator();
while(it1.hasNext()){
//it.next获取Object类型,强制转换
String s1 = (String)it1.next();
System.out.println(s1.length());
}
}
}

利用迭代器的原理,在JDK1.5之后出现了增强for循环:

增强for循环遍历数组示例:

package demo;
//增强for循环,有固定格式 //好处:代码少了,方便遍历
//弊端:没有索引,不能操作容器里面的元素
public class ForEachDemo {
public static void main(String[] args) {
function1();
function2();
} public static void function1(){
int[] arr = {3,2,5,4,8,9,6};
//遍历输出
for(int i :arr){
System.out.println(i);
}
} public static void function2(){
//遍历的时候,可以调用对象的方法
String[] str1 = {"abc","def","java"};
for(String s:str1){
System.out.println(s);
System.out.println(s.length());
}
}
}

增强for循环遍历集合示例:

package demo;

import java.util.ArrayList;

//增强for循环,有固定格式
public class ForEachDemo {
public static void main(String[] args) {
function();
} public static void function() {
ArrayList<String> array1 = new ArrayList<String>();
array1.add("abcd");
array1.add("java");
for (String s : array1) {
System.out.println(s);
}
}
}

迭代器并发修改异常:

在面试中偶尔会遇到,这里做简单介绍

package demo;

import java.util.ArrayList;
import java.util.Iterator; //迭代器的并发修改异常
//即不允许在迭代过程中修改集合
public class Demo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
Iterator<String> it1 = list.iterator();
while (it1.hasNext()) {
String s1 = it1.next();
/*
* 加入这段代码则会出现异常
*
* if(s1.equals("abc3")){ list.add("abc"); }
*/
System.out.println(s1);
}
}
}

最新文章

  1. windows下mysql 主从同步
  2. mac 下配置 git
  3. 基因匹配(bzoj 1264)
  4. Asp.net mvc5开源项目&quot;超级冷笑话&quot;
  5. GJM :JS + CSS3 打造炫酷3D相册 [转载]
  6. WPF循环加载图片导致内存溢出的解决办法
  7. Mono Json序列化和Windows 下的差别
  8. linux挂接U盘
  9. html5in24hours
  10. Yeoman+Express+Angular在Linux上开发配置方法
  11. 手机SIM卡介绍 三类不同标准的SIM卡
  12. leetcode-005 reorder list
  13. oracle中的net manager 无法配置
  14. xlrd的使用详细介绍以及基于Excel数据参数化实例详解
  15. MYSQL中group_concat有长度限制!默认1024
  16. 适配器模式-Adapter(Java实现)
  17. 【GitHub】的基本使用
  18. 【转】VMware 14 Pro安装mac os 10.12
  19. ubuntu14.06 Lts开启ssh服务
  20. 使用jstl+el表达式遇到的几个问题

热门文章

  1. 自动滚动标签marquee
  2. [FE] 有效开展一个前端项目1
  3. Django项目vue前端依赖框架过大,工程打开太卡的问题
  4. Jenkins之定时任务
  5. [leetcode]1. Two Sum两数之和
  6. zabbix安装(Ubuntu)
  7. Subarray Sums Divisible by K LT974
  8. ABP Quartz 作业调度第三篇
  9. gitlab 10汉化
  10. 修改maven 本地仓库,加入阿里云