一、集合的遍历方式
和数组不一样,集合有着很多的种类,每种集合的元素存储和获取的方式都不相同。但集合遍历的方式和数组一样都可以使用传统的循环结构去遍历集合中的元素。
因为集合的种类较为繁多,如果只使用这些遍历方式的话,实现的过程便会相当的繁琐。但是 Java 中提供了一个接口-- Iterator 接口(迭代器),该接口提供了专门服务与集合的方法。辅助循环结构来遍历集合中的元素。
1、Iterator (迭代器)
-
迭代器 (Iterator):它不是一个容器而是接口,它是一种用于访问容器的方法,可用于迭代 List、Set 和 Map 等容器。
-
迭代:即 Collection 集合的通用获取方式。再获取元素之前先要判断集合中是否有元素,如果有就将这个元素去取出来,继续再判断,直到集合所有元素被取出来为止。即:一个一个的往外拿。
- 作用:帮我们遍历或者拿到容器里边的数据。
Iterator 接口常用的方法:
- next():取出集合的下一个元素
- hasNext(): 判断是否存在下一个元素
- remove() :删除元素
迭代器的使用步骤:
-
使用集合中的的方法 iterator() 获取迭代器的实现类对象,使用 Iterator 接口接收(多态)
-
使用 Tterator 接口中的方法 hashnext() 判断还有没有下一个元素
-
使用 Tterator 接口中的方法 next() 取出集合的下一个元素
2、Java 中集合的遍历方式:
- for 循环
Demo 代码示例:
public class Test {
public static void main(String[] args) {
//创建一个集合对象
Collection<String>col = new ArrayList();
//添加元素
col.add("小明");
col.add("小红");
col.add("小蓝");
col.add("小绿");
for (int i = 0; i < col.size(); i++) {
System.out.println(col.toArray()[i]);
}
}
}
运行结果:
- while 循环 (搭配迭代器)
Demo 代码示例:
public class Test {
public static void main(String[] args) {
//创建一个集合对象
Collection<String>col = new ArrayList();
//添加元素
col.add("小明");
col.add("小红");
col.add("小蓝");
col.add("小绿");
//创建迭代器子类对象
Iterator it = col.iterator(); // 实际返回的肯定是子类对象,这里是多态
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}
}
}
运行结果:
- 增强 for 循环 (for -each 循环)
专门用来遍历数组和集合的,所有的数组跟单列集合都可以使用。它的内部原理就是一个迭代器 Iterator ,所以在遍历过程中,不能对集合元素进行增删操作。
- 语法:
for(类型 变量 : 数组/集合){// 数组或者集合里的每一项赋值给这个变量
// 循环体
}
单例集合 Demo 代码示例:
public class Test {
public static void main(String[] args) {
String[] student = {"小明","小红","小蓝"};
// // 传统遍历方式
// for (int i = 0; i < student.length; i++) {
// System.out.println(student[i]);
// }
// 增强for
for(String c : student){
System.out.println(c);
}
System.out.println("============================");
List<Integer> list = new ArrayList<Integer>();
list.add(123);
list.add(234);
list.add(456);
for(Integer n : list){
System.out.println(n);
}
}
}
多列集合 Demo 代码示例:
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("Java基础总结", "https://blog.csdn.net/shiyu_951/article/details/122297797");
map.put("集合总结", "https://blog.csdn.net/shiyu_951/article/details/125511152");
for (Map.Entry<String, String> entry : map.entrySet()) {
String mapKey = entry.getKey();
String mapValue = entry.getValue();
System.out.println(mapKey + ":" + mapValue);
}
}
}
- 增强 for 循环的好处:简化了数组和集合的遍历。
- 增强 for 循环的弊端: 增强for的目标不能为null。
- 如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。