Java中的ArrayDeque forEach()方法
在Java中,使用ArrayDeque可以代替Stack和Queue。它是一个Array序列,具有动态伸缩的功能。它可以在两端添加和删除元素,因此可以用作堆栈、队列或双端队列。ArrayDeque的一个重要方法是forEach(),可以遍历ArrayDeque中所有元素并对其执行操作。
ArrayDeque类
Java中的ArrayDeque是Java Collections框架的一部分,是Deque接口的实现。而Deque是Queue接口的子接口,因此ArrayDeque实现了Queue和Deque的功能。可以将元素添加到两端,并将元素从两端移除,操作类似于Queue和Stack。ArrayDeque中的元素可以为空,并且数组默认大小是16,可以根据需要动态增加或减小。下面是一个简单的ArrayDeque示例:
import java.util.ArrayDeque;
public class ArrayDequeExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
queue.add("A");
queue.add("B");
queue.add("C");
System.out.println(queue); // Output : [A, B, C]
// Remove the elements from the front
System.out.println(queue.remove()); // Output : A
System.out.println(queue.remove()); // Output : B
System.out.println(queue); // Output : [C]
// Remove the elements from the rear
System.out.println(queue.removeLast()); // Output : C
System.out.println(queue); // Output : []
}
}
forEach()方法
ArrayDeque类中的forEach()方法是Java 8中的新增方法。forEach()方法采用一个Lambda表达式作为参数,可以遍历ArrayDeque中的所有元素并对其执行操作。此方法返回void,因此不能获得结果。下面是一个使用forEach()方法的简单示例:
import java.util.ArrayDeque;
public class ArrayDequeExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
queue.add("A");
queue.add("B");
queue.add("C");
// Iterate over the queue
queue.forEach(item -> System.out.println(item));
}
}
上面的代码将ArrayDeque中的所有元素打印到控制台。
以下是使用forEach()方法的另一个示例,该示例会将元素转换为小写,并将其打印到控制台:
import java.util.ArrayDeque;
public class ArrayDequeExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
queue.add("A");
queue.add("B");
queue.add("C");
// Iterate over the queue
queue.forEach(item -> {
String lowerCaseItem = item.toLowerCase();
System.out.println(lowerCaseItem);
});
}
}
forEach()方法与迭代器的比较
ArrayDeque还有一个方法,即iterator(),可以创建一个Iterator对象,该对象可以用于迭代ArrayDeque中的元素。与forEach()方法不同,迭代器可以使用remove()方法从中删除元素。下面是一个使用迭代器删除元素的示例:
import java.util.ArrayDeque;
import java.util.Iterator;
public class ArrayDequeExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
queue.add("A");
queue.add("B");
queue.add("C");
// Use an iterator to delete elements
Iterator<String> iterator = queue.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item.equals("B")) {
iterator.remove();
}
}
// Iterate over the queue
queue.forEach(item -> System.out.println(item));
}
}
Lambda表达式
Lambda表达式是Java 8中引入的新特性。它允许将函数作为方法参数传递。Lambda表达式不是一个线程,也不是一个类。它只是一个指向函数的引用。Lambda表达式允许在代码块中定义匿名函数,并将其传递给具有函数参数的方法。Lambda表达式可以使代码更加简洁易懂。
以下是Lambda表达式的通用语法:
(parameters) -> expression
或
(parameters) -> { statements; }
其中,parameters指定方法参数的类型和名称,expression是单个语句的表达式,而statements是一系列语句的代码块。
Lambda表达式还可以使用方法引用,可以指向一个已经存在的方法。方法引用的通用语法如下:
Class::methodName
forEach()方法的性能
Java中的forEach()方法是使用Lambda表达式并行处理元素的一种方法。它可以更快地处理元素,因为它可以将工作分配给多个处理器来处理。但是,forEach()方法不一定比传统的循环更快。在某些情况下,使用传统的循环可能会更快。
示例代码
import java.util.ArrayDeque;
public class ArrayDequeExample {
public static void main(String[] args) {
ArrayDeque<String> queue = new ArrayDeque<>();
queue.add("A");
queue.add("B");
queue.add("C");
// Iterate over the queue
queue.forEach(item -> {
String lowerCaseItem = item.toLowerCase();
System.out.println(lowerCaseItem);
});
}
}
结论
在Java中,使用ArrayDeque是一种快速、有效的管理元素的方法。可以使用forEach()方法来操作ArrayDeque中的所有元素,并使用Lambda表达式对它们进行操作。但是,forEach()方法不一定比传统的循环更快。
极客笔记