Queue 和 Stack 的常用遍历方式
# Queue 和 Stack 的常用遍历方式
# 1. 使用增强型 for 循环遍历队列
使用说明:
- 适用场景: 适用于所有实现了
Queue
接口的集合,如LinkedList
、PriorityQueue
、ArrayDeque
等。 - 注意事项: 适合简单的只读操作,无法在遍历过程中修改队列的结构(如增删元素)。
代码示例:
import java.util.LinkedList;
import java.util.Queue;
public class QueueEnhancedForLoopExample {
public static void main(String[] args) {
// 创建一个LinkedList作为Queue的实现
Queue<String> queue = new LinkedList<>();
queue.add("Java");
queue.add("Python");
queue.add("C++");
// 使用增强型for循环遍历队列
for (String item : queue) {
System.out.println("Element: " + item);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
参数说明:
String item
:循环变量,每次遍历时代表当前元素。
# 2. 使用 Iterator 遍历队列
使用说明:
- 适用场景: 适用于所有实现了
Queue
接口的集合,如LinkedList
、PriorityQueue
、ArrayDeque
等。 - 注意事项: 可以在遍历过程中删除元素,适合需要修改队列结构的场景。
代码示例:
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
public class QueueIteratorExample {
public static void main(String[] args) {
// 创建一个LinkedList作为Queue的实现
Queue<String> queue = new LinkedList<>();
queue.add("Java");
queue.add("Python");
queue.add("C++");
// 使用Iterator遍历队列
Iterator<String> iterator = queue.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println("Element: " + item);
// 示例:可以在遍历过程中删除元素
// iterator.remove();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
参数说明:
iterator.hasNext()
:判断是否有下一个元素。iterator.next()
:获取下一个元素。iterator.remove()
:删除当前元素(可选操作)。
# 3. 使用增强型 for 循环遍历栈
使用说明:
- 适用场景: 适用于所有实现了
Stack
功能的数据结构,如Stack
类、ArrayDeque
(作为栈使用时)。 - 注意事项: 适合简单的只读操作,不能在遍历过程中修改栈的结构。
代码示例:
import java.util.Stack;
public class StackEnhancedForLoopExample {
public static void main(String[] args) {
// 创建一个Stack
Stack<String> stack = new Stack<>();
stack.push("Java");
stack.push("Python");
stack.push("C++");
// 使用增强型for循环遍历栈
for (String item : stack) {
System.out.println("Element: " + item);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
参数说明:
String item
:循环变量,每次遍历时代表当前元素。
# 4. 使用 Iterator 遍历栈
使用说明:
- 适用场景: 适用于所有实现了
Stack
功能的数据结构,如Stack
类、ArrayDeque
(作为栈使用时)。 - 注意事项: 可以在遍历过程中删除元素,适合需要修改栈结构的场景。
代码示例:
import java.util.Iterator;
import java.util.Stack;
public class StackIteratorExample {
public static void main(String[] args) {
// 创建一个Stack
Stack<String> stack = new Stack<>();
stack.push("Java");
stack.push("Python");
stack.push("C++");
// 使用Iterator遍历栈
Iterator<String> iterator = stack.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println("Element: " + item);
// 示例:可以在遍历过程中删除元素
// iterator.remove();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
参数说明:
iterator.hasNext()
:判断是否有下一个元素。iterator.next()
:获取下一个元素。iterator.remove()
:删除当前元素(可选操作)。
# 5. 使用 forEach 和 Lambda 表达式遍历队列或栈
使用说明:
- 适用场景: 适用于所有实现了
Iterable
接口的队列或栈。 - 注意事项: 仅适用于 Java 8 及以上版本,代码简洁,但不支持在遍历过程中修改结构。
代码示例:
import java.util.LinkedList;
import java.util.Queue;
public class QueueLambdaExample {
public static void main(String[] args) {
// 创建一个LinkedList作为Queue的实现
Queue<String> queue = new LinkedList<>();
queue.add("Java");
queue.add("Python");
queue.add("C++");
// 使用Lambda表达式遍历队列
queue.forEach(item -> System.out.println("Element: " + item));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
参数说明:
queue.forEach(item -> {})
:Lambda 表达式处理每个元素。
# 6. 使用传统 for 循环遍历栈(仅适用于 Stack
类)
使用说明:
- 适用场景: 仅适用于
Stack
类,可以通过索引访问元素。 - 注意事项: 适合需要通过索引访问元素或进行复杂逻辑处理的场景。
代码示例:
import java.util.Stack;
public class StackTraditionalForLoopExample {
public static void main(String[] args) {
// 创建一个Stack
Stack<String> stack = new Stack<>();
stack.push("Java");
stack.push("Python");
stack.push("C++");
// 使用传统for循环遍历栈
for (int i = 0; i < stack.size(); i++) {
System.out.println("Element: " + stack.get(i));
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
参数说明:
int i
:循环变量,用于访问栈中的索引。stack.get(i)
:通过索引获取栈中的元素。
# 7. Queue 和 Stack 的遍历方式总结
- 增强型
for
循环和Iterator
是遍历队列和栈的常见方式,适用于大多数场景。 - 使用
forEach
和 Lambda 表达式提供了更现代化的遍历方式,适合简化代码。 - 对于
Stack
类,传统for
循环适合需要基于索引访问元素的场景。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08