Java 从入门到进阶之路(二十二)
在之前的文章我们介绍了一下 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 从入门到进阶之路(二十二)的更多相关文章
- Java 从入门到进阶之路(十二)
在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...
- Java 从入门到进阶之路(十八)
在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更 ...
- Java 从入门到进阶之路(十)
之前的文章我们介绍了一下 Java 中的引用型数组类型,接下来我们再来看一下 Java 中的继承. 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继 ...
- Java 从入门到进阶之路(十五)
在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意 ...
- Java 从入门到进阶之路(十四)
在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时 ...
- Java 从入门到进阶之路(十六)
在之前的文章我们介绍了一下 Java 中类的多态,本章我们来看一下 Java 中类的内部类. 在 Java 中,内部类分为成员内部类和匿名内部类. 我们先来看一下成员内部类: 1.类中套类,外面的叫外 ...
- Java 从入门到进阶之路(十九)
在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,ch ...
- Python 爬虫从入门到进阶之路(十二)
之前的文章我们介绍了 re 模块和 lxml 模块来做爬虫,本章我们再来看一个 bs4 模块来做爬虫. 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也 ...
- Vue 从入门到进阶之路(十二)
之前的文章我们介绍了一下 vue 中插槽的使用,本章我们接着介绍一下 vue 中的作用域插槽. <!DOCTYPE html> <html lang="en"&g ...
- Java 从入门到进阶之路(二十)
在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...
随机推荐
- 洛谷P2486 [SDOI2011]染色 题解 树链剖分+线段树
题目链接:https://www.luogu.org/problem/P2486 首先这是一道树链剖分+线段树的题. 线段树部分和 codedecision P1112 区间连续段 一模一样,所以我们 ...
- Java语法格式
任何一种语言都有自己的语法规则,Java也一样,既然是规则,那么知道其如何使用就可以了. 代码都定义在类中,类由class来定义,区分 public class 和 class; 代码严格区分大小 ...
- Python--day48--面向对象回顾
面向对象回顾: 例1: 例2: 特殊方法(要背会):
- 析构函数 p157
析构函数 确保对象的各部分被正确的清除,及做一些用户指定的其他清理工作. 当对象超出它的作用域时,编译器将自动调用析构函数:手动用new在堆上分配的对象空间,需要调用'delete 对象地址'进行手动 ...
- H3C DHCP地址分配方式
- Array数组的常用方法
1.concat()链接数组 var a = [1,2,3]; console.log(a.concat(4,5));//[1,2,3,4,5] 2.join()分隔符链接数组变字符串,如果省略该参数 ...
- Python13_安装、解释器
Linux下大部分系统默认自带python2.x的版本,最常见的是python2.6或python2.7版本,默认的python被系统很多程序所依赖, 比如centos下的yum就是python2写的 ...
- 通过Servlet生成验证码图片(转)
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...
- pandas数据分析小知识点(一)
最近工作上,小爬经常需要用python做一些关于excel数据分析的事情,显然,从性能和拓展性的角度出发,使用pandas.numpy是比vba更好的选择.因为pandas能提供诸如SQL的很多查找. ...