在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator。

当我们创建完成集合后,怎么样从集合中取元素呢?Java 为我们提供了迭代器 Iterator 来帮我们实现,如下:

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; /**
* 遍历集合
* Collection 提供了统一的遍历集合元素的方式:迭代器模式
* Iterator iterator() 获取用于遍历当前集合的迭代器
* java.util.Iterator 是一个接口,规定了用于遍历集合元素的相关方法,
* 不同的集合提供了相应的实现类,
* 无需记住那些类的名字,只将他们当做 Iterator 即可
* <p>
* 遍历集合遵循:问,取,删的步骤,其中删除不是必须操作
*/
public class Main {
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("one");
collection.add("two");
collection.add("three");
collection.add("four");
// 获取用于遍历当前集合的迭代器
Iterator iterator = collection.iterator();
/**
* boolean hasNext() 问的过程
* 该方法是判断集合中是否还有元素可以取出
*
* E next() 取的过程
* 获取集合中下一个元素
* */
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println(string); // one two three four
}
}
}

从上面的代码可以看出,我们可以通过迭代器 Iterator 来输出每一个元素,那如果我们想要删除其中一个元素呢,既然我们可以遍历出每个元素,那我们可不可以通过 equals 来判断,如果存在就通过之前讲的 remove 方法删除掉呢,如下:

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class Main {
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("one");
collection.add("two");
collection.add("three");
collection.add("four");
// 获取用于遍历当前集合的迭代器
Iterator iterator = collection.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
if ("one".equals(string)) {
/**
* 在使用迭代器遍历集合时,不要使用集合的方法增删改查
* 否则会引发异常
* */
// collection.remove(string); // 编译器错误 Exception in thread "main" java.util.ConcurrentModificationException
iterator.remove(); // 可以直接调用 Iterator 自带的 remove 方法,相当于去一个删一个
}
}
System.out.println(collection); // [two, three, four]
}
}

我们在讲数组的时候,对数组进行过遍历操作,并且用到过 for each 方法,这个在集合中同样适用,如下:

 import java.util.ArrayList;
import java.util.Collection; /**
* JDK5.0 之后推出了一个新的特性
* 增强 for 循环,又叫做新循环,for each
* <p>
* 新循环不能代替传统循环,
* 作用仅仅是用来遍历集合或数组的
*/ public class Main {
public static void main(String[] args) {
String[] array = {"one", "two", "three", "four"};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]); // one two three four
}
for (String string : array) {
System.out.println(string); // one two three four
} Collection collection = new ArrayList();
collection.add("one");
collection.add("two");
collection.add("three");
collection.add("four");
for (Object object : collection) {
String string = (String) object;
System.out.println(string); // one two three four
}
}
}

在上面的代码中,可以看出我们可以通过 for each 的形式输出 collection 集合,那可不可以通过 collection.remove() 进行删除呢,如下:

 import java.util.ArrayList;
import java.util.Collection; public class Main {
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("one");
collection.add("two");
collection.add("three");
collection.add("four");
for (Object object : collection) {
String string = (String) object;
if("one".equals(string)){
/**
* 新循环并非新的语法,
* 新循环是编译器认可,而不是虚拟机认可
* 使用新循环遍历时,编译器会将它改为迭代器但是遍历
* 所以在使用新循环遍历集合时,不能通过集合的方法增删改查
* */
collection.remove(string); // 编译错误 Exception in thread "main" java.util.ConcurrentModificationException
}
}
}
}

新循环并不能实现我们想要的增删改查,我们可以简单低理解为旧瓶装新酒。

Java 从入门到进阶之路(二十二)的更多相关文章

  1. Java 从入门到进阶之路(十二)

    在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...

  2. Java 从入门到进阶之路(十八)

    在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...

  3. Java 从入门到进阶之路(十)

    之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...

  4. Java 从入门到进阶之路(十五)

    在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...

  5. Java 从入门到进阶之路(十四)

    在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...

  6. Java 从入门到进阶之路(十六)

    在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...

  7. Java 从入门到进阶之路(十九)

    在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...

  8. Python 爬虫从入门到进阶之路(十二)

    之前的文章我们介绍了 re 模块和 lxml 模块来做爬虫,本章我们再来看一个 bs4 模块来做爬虫. 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也 ...

  9. Vue 从入门到进阶之路(十二)

    之前的文章我们介绍了一下 vue 中插槽的使用,本章我们接着介绍一下 vue 中的作用域插槽. <!DOCTYPE html> <html lang="en"&g ...

  10. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

随机推荐

  1. ElasticSearch从不懂到会用1—安装篇

    连续加班近一个多月,项目终于告一段落了,也腾出时间写一写项目中用到的东西.在这个项目中,我负责的主要是多种业务场景下的数据查询和搜索,其中搜索用到了ElasticSearch搜索引擎.下面主要围绕El ...

  2. Java中方法的格式

    [修饰符] 返回值类型 方法名([参数类型 形式参数1,参数类型 形式参数2,……]) {             执行语句;     [return 返回值;]//需要的话 } 参数列表(参数的类型 ...

  3. Python--day46--mysql存储过程(不常用)(包含防sql注入)

    一.存储过程: 优点:只要传很少的数据到数据库就可以了  缺点:dba管理数据库的时候可能会对数据库进行了更改了那一坨sql语句. 二.创建存储过程: 1.简单 创建存储过程: Python中使用结果 ...

  4. 2019-8-2-WPF-从文件加载字体

    title author date CreateTime categories WPF 从文件加载字体 lindexi 2019-08-02 17:10:33 +0800 2018-2-13 17:2 ...

  5. js基础——function类型

    1.函数声明方式 1)普通声明方式  function box(num1,num2){       return num1 + num2;  } 2)使用变量初始化函数 var box = funct ...

  6. P1090 后缀表达式

    题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3(5–2)+7对应的 ...

  7. linux 创建你的 /proc 文件

    一旦你有一个定义好的 read_proc 函数, 你应当连接它到 /proc 层次中的一个入口项. 使用一个 creat_proc_read_entry 调用: struct proc_dir_ent ...

  8. H3C进入目录---用户视图

    进入logfile文件目录 <H3C>cd logfile/        //进入目录 <H3C>pwd             //显示当前所属的目录 cf:/logfil ...

  9. jQuery 工具类函数-检测浏览器是否属于W3C盒子模型

    浏览器的盒子模型分为两类,一类为标准的w3c盒子模型,另一类为IE盒子模型,两者区别为在Width和Height这两个属性值中是否包含padding和border的值,w3c盒子模型不包含,IE盒子模 ...

  10. JRoll 2 适用于移动开发滚动(滑动)——轻量级插件

    JRoll,一款能滚起上万条数据,具有滑动加速.回弹.缩放.滚动条.滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件. 官网:http://www.c ...