在之前的文章我们介绍了一下 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. 【a403】遍历树问题

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 我们都很熟悉二叉树的前序.中序.后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历, ...

  2. 2019-8-31-AutoHotKey-用打码的快捷键

    title author date CreateTime categories AutoHotKey 用打码的快捷键 lindexi 2019-08-31 16:55:58 +0800 2019-06 ...

  3. 记录vue创建项目过程

    已经学过无数次,但是每次都忘记,毕竟脑容量太小了,每次都需要翻看原来项目和视频再次学习,所以以此文字形式记录下来,方便于下次使用观看 1.打开git,找到创建vue的文件夹(已经安装好git的,然后在 ...

  4. tet-2

      一.html和css部分 1.如何理解CSS的盒子模型? 标准盒子模型:宽度=内容的宽度(content)+ border + padding 低版本IE盒子模型:宽度=内容宽度(content+ ...

  5. Cannot destructure property `createHash` of 'undefined' or 'null'(next服务端渲染引入next-less错误).

    next中引入@zeit/next-less因next版本过低(webpack4之前的版本)无法执行next-less内置的mini-css-extract-plugin mini-css-extra ...

  6. 阿里云“网红&quot;运维工程师白金:做一个平凡的圆梦人

    他是阿里云的一位 P8 运维专家,却很有野心得给自己取花名“辟拾(P10)”:他没有华丽的履历,仅凭着 26 年的热爱与坚持,一步一个脚印踏出了属于自己的技术逆袭之路:他爱好清奇,练就了能在 20 秒 ...

  7. from __future__ import print_function的使用

    1.作用:把下一个新版本的特性导入到当前版本,就可以在当前版本中测试一些新版本的语法特性,例如在python2的环境下加入这一句可以测试python3的输出语法 2.使用方式:置于程序的第一行 3.示 ...

  8. Google 浏览器设置打开超链接到新窗口标签页

    一.windows  按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...

  9. python multiprocessing.freeze_support

    Running on windows platform, give me an error as below: File "C:\Python\lib\multiprocessing\for ...

  10. JAVA CONCURRENT FRAMEWORK

    1.ConcurrentHashMap 在并发中使用hashmap容易导致死锁,hashmap存在以下问题 1.线程不安全的hashmap 在多线程环境下使用hashmapPut操作时会引起死循环,因 ...