1.Iterator迭代器
1.1使用迭代器对集合进行遍历
/**
目标:能够使用迭代器对集合进行遍历
讲解:
1. 什么是迭代器
迭代:遍历
一个实现了Iterator接口用来遍历集合的对象
2. 为什么要使用迭代器
不同体系的集合特点不一样
* List接口有索引,我们可以通过for循环+get方法来获取数据,
* Set接口没有索引的,不能通过for循环+get方法获取数据。
* 迭代器是一种通用的集合遍历方式
3. 迭代器的好处
* 屏蔽了众多集合的内部实现细节,对外提供一种统一的遍历方式
* 任何单列集合都可以使用迭代器遍历
4. 如何获取迭代器
* 调用集合对象的方法获得,该方法如下:
* Iterator<E> iterator() 获得迭代器对象
5. 迭代器的常用方法
* boolean hasNext()
* E next()
6. 迭代器的使用步骤
* 调用集合对象的iterator()获得迭代器对象
* 调用迭代器对象的方法进行遍历
小结:
1. 迭代器使用步骤
* 调用集合对象的iterator()获得迭代器对象
* 调用迭代器对象的方法进行遍历
*/
package com.itheima._01迭代器使用;
import java.util.ArrayList;
import java.util.Iterator;
// 使用迭代器遍历集合:循环改进
public class Demo011 {
public static void main(String[] args) {
// 创建集合对象
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("孙悟空");
list.add("猪八戒");
list.add("白骨精");
// 迭代器遍历集合
Iterator<String> it = list.iterator();
// 使用while循环遍历
while(it.hasNext()){
System.out.println(it.next());
}
}
}
理解迭代器使用注意事项
package com.itheima._02迭代器原理;
import java.util.ArrayList;
import java.util.Iterator;
/**
目标:理解迭代器使用注意事项
讲解:
1. 了解并发修改异常(注意即可,一般工作中不会有这种需求)
* java.util.ConcurrentModificationException:并发修改异常
* 在使用迭代器遍历集合的过程中对集合元素进行了增删操作,则会出现并发修改异常。
2. hasNext和next方法必须成对:一次hasNext对应一次next方法
3. 如果集合中没有元素可迭代了仍然调用next方法,则会出现:没有元素异常。
小结:
1. 什么时候会出现并发修改异常?
使用迭代器遍历集合过程中对集合元素增删操作
2. 当集合遍历完毕之后还调用next方法会出现什么异常?
没有元素异常
*/
public class Demo022 {
public static void main(String[] args) {
// 创建集合对象
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("孙悟空");
list.add("猪八戒");
list.add("白骨精");
list.add("小白龙");
// 获得迭代器对象
Iterator<String> it = list.iterator();
while(it.hasNext()){
// 获得当前遍历元素
String str = it.next(); // 孙悟空 白骨精
if (str.equals("猪八戒")){
// 添加沙僧
// list.add("沙僧");
}
System.out.println(str); // 猪八戒 小白龙
}
}
}
2.增强for遍历数组
- iter 快捷键
package com.itheima._02迭代器原理;
import java.util.ArrayList;
/**
目标:掌握增强for的作用和格式
讲解:
1. 增强for的作用:
JDK1.5新特性
专门用来遍历集合和数组
本质:就是迭代器
2. 增强for的格式:
for(数据类型 变量名:数组名或集合名){
}
小结:
增强for的作用:遍历数组和集合
增强for的格式:for(数据类型 变量名:数组或集合){}
*/
public class Demo023 {
public static void main(String[] args) {
test01();
// test02();
}
/**
* 增强for遍历集合
*/
private static void test02() {
// 创建集合对象
ArrayList<String> list = new ArrayList<>();
// 添加元素
list.add("孙悟空");
list.add("猪八戒");
list.add("白骨精");
list.add("小白龙");
// 使用增强for
for (String s : list) {
System.out.println(s);
}
}
/**
* 增强for遍历数组
*/
private static void test01() {
int[] arr = {
1,2,3,4,5};
// 使用增强for
/*
for(数据类型 变量名:数组名或集合名){
}
*/
for(int num:arr){
num++;
System.out.println(num);
}
for (int i : arr) {
System.out.println(i);
}
}
}
3.斗地主
package com.itheima._03斗地主案例;
import java.util.ArrayList;
import java.util.Collections;
/**
* 斗地主案例效果演示
*/
public class Demo031 {
public static void main(String[] args){
// 定义集合保存牌
ArrayList<Poker> pokers = new ArrayList<Poker>();
// 添加大小王
pokers.add(new Poker("大王", ""));
pokers.add(new Poker("小王", ""));
// 定义花色数组
String[] colors = {
"♠", "♥", "♣", "♦"};
// 定义牌号数组
String[] numbers = {
"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
for (String number : numbers) {
//