Java集合遍历的几种方式
迭代器
-
不依赖索引
-
遍历完毕后,指针不会复位.
-
遍历时,不能使用集合的方法进行增加或删除.
-
只能使用一次
next()
方法.
主要方法
public interface Iterator<E> {Iterator<E> iterator();//返回迭代器对象,默认指向当前集合的0索引boolean hasNext(); // 用于判断集合中是否还有下一个元素,有的话返回trueE next(); // 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置。void remove(); // 从集合中移除当前元素
}
使用
import java.util.ArrayList;
import java.util.Iterator;public class IteratorExample {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");Iterator<String> iterator = list.iterator(); // 获取迭代器// 遍历while (iterator.hasNext()) {String fruit = iterator.next();System.out.println(fruit);}}
}
remove()
: 用于移除集合中的元素, 注意必须在调用 next()
之后使用。
ArrayList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String fruit = iterator.next();if (fruit.equals("Banana")) {//list.remove(); //不能使用集合的方法来移除或添加元素iterator.remove(); // 移除当前元素}}System.out.println(list);
增强for循环(foreach)
用于遍历单列集合、数组或任何可迭代对象.
for (ElementType element : collection) {// 处理 element
}
遍历数组:
public class Main {public static void main(String[] args) {String[] fruits = {"Apple", "Banana", "Cherry"};for (String fruit : fruits) {System.out.println(fruit);}}
}
遍历 ArrayList
:
import java.util.ArrayList;public class Main {public static void main(String[] args) {ArrayList<String> fruits = new ArrayList<>();fruits.add("Apple");fruits.add("Banana");fruits.add("Cherry");for (String fruit : fruits) {System.out.println(fruit);}}
}
遍历集合(HashSet
):
import java.util.HashSet;public class Main {public static void main(String[] args) {HashSet<String> fruits = new HashSet<>();fruits.add("Apple");fruits.add("Banana");fruits.add("Cherry");for (String fruit : fruits) {System.out.println(fruit);}}
}
注意:
- 增强
for
循环不能用于遍历Map
,因为Map
不支持索引.遍历Map
需要使用entrySet()
、keySet()
或values()
方法。
遍历 Map
:
package JavaProjets; import java.util.Map;
import java.util.HashMap; public class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("Apple", 1); map.put("Banana", 2); map.put("Orange", 3); for (Map.Entry<String, Integer> e : map.entrySet()) { System.out.println(e.getKey() + " " + e.getValue()); }
}}
- 修改增强for中的变量,不会影响集合原来的元素
forEach()方法
集合.forEach(元素 -> {// 处理逻辑
});
Lambda表达式遍历
遍历 List
import java.util.ArrayList;
import java.util.List;public class LambdaExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");// 使用 Lambda 表达式遍历list.forEach(item -> System.out.println(item));}
}
遍历 Map
Map
是双列集合,通过 entrySet()
方法获取键值对
Map<String, Integer> map = new HashMap<>();map.put("Apple", 3);map.put("Banana", 5);map.put("Cherry", 2);// 使用 Lambda 表达式遍历键值对map.forEach((key, value) -> System.out.println("Key: " + key + ", Value: " + value));
结合Stream流
Lambda
可以结合 Stream
流 实现过滤和遍历操作
List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");// 过滤出以 A 开头的元素并遍历list.stream().filter(item -> item.startsWith("A")).forEach(item -> System.out.println(item));}