一、for循环遍历
最常见的遍历集合的方式是使用for循环。对于List集合,可以通过索引遍历,对于Set和Map集合,则需要先转换为List集合再进行遍历。
//List集合遍历 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); for (int i=0; i<list.size(); i++) { System.out.println(list.get(i)); //a b c } //Set集合遍历 Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); List<String> listSet = new ArrayList<>(set); for (int i=0; i<listSet.size(); i++) { System.out.println(listSet.get(i)); //a b c } //Map集合遍历 Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); List<Map.Entry<Integer, String>> listMap = new ArrayList<>(map.entrySet()); for (int i=0; i<listMap.size(); i++) { System.out.println(listMap.get(i).getKey() + ":" + listMap.get(i).getValue()); //1:a 2:b 3:c }
二、增强型for循环遍历
Java 5引入了增强型for循环,使用起来非常方便,适用于List、Set、Array等集合,但是对于Map集合则不方便,因为Map集合中是键值对,需要使用entrySet()方法将其转换为Set集合进行遍历。
//List集合遍历 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); for (String str : list) { System.out.println(str); //a b c } //Set集合遍历 Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); for (String str : set) { System.out.println(str); //a b c } //Map集合遍历 Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); //1:a 2:b 3:c }
三、迭代器遍历
Iterator是Java集合框架中的一个接口,专门用来遍历集合中的元素,通过使用该接口配合while循环,我们可以很方便地遍历List、Set、Map等集合。
//List集合遍历 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator<String> itList = list.iterator(); while (itList.hasNext()) { System.out.println(itList.next()); //a b c } //Set集合遍历 Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); Iterator<String> itSet = set.iterator(); while (itSet.hasNext()) { System.out.println(itSet.next()); //a b c } //Map集合遍历 Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); Iterator<Map.Entry<Integer, String>> itMap = map.entrySet().iterator(); while (itMap.hasNext()) { Map.Entry<Integer, String> entry = itMap.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); //1:a 2:b 3:c }
四、Lambda表达式遍历
Java 8引入Lambda表达式,可以让我们更加简洁地对集合进行遍历,主要使用forEach()方法实现。
//List集合遍历 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.forEach(str -> System.out.println(str)); //a b c //Set集合遍历 Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); set.forEach(str -> System.out.println(str)); //a b c //Map集合遍历 Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); map.forEach((key, value) -> System.out.println(key + ":" + value)); //1:a 2:b 3:c
五、Stream流遍历
在Java 8中还引入了Stream流,通过Stream可以对集合进行更加高效的遍历、过滤和映射等操作,能够大大简化集合的遍历操作。
//List集合遍历 List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.stream().forEach(str -> System.out.println(str)); //a b c //Set集合遍历 Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); set.stream().forEach(str -> System.out.println(str)); //a b c //Map集合遍历 Map<Integer, String> map = new HashMap<>(); map.put(1, "a"); map.put(2, "b"); map.put(3, "c"); map.entrySet().stream().forEach(entry -> System.out.println(entry.getKey() + ":" + entry.getValue())); //1:a 2:b 3:c
六、小结
本文介绍了Java集合的多种遍历方式,每种方式都具有自己的优缺点,在实际开发中应根据具体需求进行选择。同时也可根据需求选择不同的集合类型,以及运用Java 8新特性Lambda表达式和Stream流简化遍历操作。