List集合
- 因为List集合底层是数组,所以可以用普通for循环,通过下角标来进行遍历
ArrayList<String> strings = new ArrayList<>();
strings.add("张三");
strings.add("李四");
strings.add("王五");
for (int i = 0; i < strings.size(); i++) {
System.out.println(strings.get(i));
}
但是普通for循环也有弊端,当在遍历集合的时候删除元素时会造成数据侧漏的问题。所以可以采取倒序遍历或者正序遍历删除时给下标减1的方法进行遍历。
- 使用增强for循环
for (String string : strings) {
System.out.println("string = " + string);
}
💡 注意!也不可以在增强for循环里面删除数据,会报:ConcurrentModificationException
错误(当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常)。
- Iterator迭代器遍历
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
iterator迭代器中有自带的remove()方法可以实现便遍历便删除操作。
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
iterator.remove();
}
- 通过将集合通过toArray()方法转换为数组实现遍历
Object[] objects = strings.toArray();
for (Object object : objects) {
System.out.println("object = " + object);
}//普通for循环也可以
- 将集合转换为stream流,通过foreach()遍历
strings.stream().forEach(str -> System.out.println("str = " + str));
- 使用lambda表达式
strings.forEach(System.out::println);
Set集合
因为Set集合的底层原理是通过map实现的,所以没有下标的概念,所以不能使用普通for循环进行遍历。
- 增强for循环
HashSet<String> strings = new HashSet<>();
strings.add("张三");
strings.add("李四");
strings.add("王五");
for (String string : strings) {
System.out.println("string = " + string);
}
//输出 :string = 李四
// string = 张三
// string = 王五
- iterator迭代器
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
- lambda表达式
strings.forEach(System.out::println);
strings.forEach(str -> System.out.println("str = " + str));
- stream流
strings.stream().forEach(s -> System.out.println("s = " + s));
Map集合
不能用普通for循环进行遍历
- 获得hashmap的keySet,使用增强for循环遍历key,通过key值获得value值
for (String s : hashMap.keySet()) {
System.out.println("hashMap.get(s) = " + hashMap.get(s));
}
- 获得hashmap的entrySet,使用增强for循环直接获取键值对
Set<Map.Entry<String, String>> entries = hashMap.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println("entry = " + entry);
}
//输出:entry = zs=张三
- 获得hashmap的entrySet,使用iterator遍历器,直接获得键值对
Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
//注意,因为hashmap是无序的,所以输出结果也是没有顺序的!
- 通过stream流遍历
hashMap.entrySet().stream().forEach(System.out::println);
- 通过lambda表达式
hashMap.forEach((k,v) -> System.out.println(k +"="+ v));