1 List集合的遍历
//创建一个ArrayList对象
ArrayList<Integer> list = new ArrayList<Integer>();
//输出集合中元素
System.out.println(list);//[]
//遍历1:使用for循环
System.out.println("遍历1:使用for循环");
for(int i=0;i<list.size();i++){
//获取第i个元素
int elem = list.get(i);//自动拆箱
//输出第i个元素
System.out.println(i+" "+elem);
}
//遍历2:使用增强的for循环
System.out.println("遍历2:使用增强的for循环");
for(Integer elem :list){
System.out.println(elem);
//Integer i = (Integer)elem;
//System.out.println(i);
}
//遍历3:使用Iterator迭代器
System.out.println("遍历3:使用Iterator迭代器");
Iterator<Integer> it = list.iterator();
while(it.hasNext()){//还有元素,没有就结束循环
//如果有,就取出来
int elem = it.next();
//输出来
System.out.println(elem);
}
2 Set集合的遍历
注意:Set集合无序,所以不可以根据for循环以索引的方式遍历,下面Map的遍历本质上是先转为Set再遍历,所以也不能用for循环索引遍历。
Set<String> set = new HashSet<String>();
//遍历1:使用Iterator迭代器
System.out.println("遍历1:使用Iterator迭代器");
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String str = it.next();
System.out.println(str);
}
//遍历2:使用增强的for循环
System.out.println("遍历2:使用增强的for循环");
for (String str : set) {
System.out.println(str);
}
3 Map集合的遍历
注意:
- Map集合没有实现Iterator接口,所以它不可以用Iterator遍历,一般我们要现将其转为Set再遍历。
- for-each循环(遍历集合)时,底层使用的是Iterator,所以Map也不可以使用增强for循环遍历
Map <String,String>map = new HashMap<String,String>();
//Map的遍历
//思路1:先得到所有的key(Set),然后根据key找到value
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key + "---->" + map.get(key));
}
//思路2:先得到所有的key-value组成的Set,然后输出每个key-value
Set<Map.Entry<String, String>> entrySet = map.entrySet();
Iterator<Map.Entry<String, String>> it = entrySet.iterator();
while (it.hasNext()) {
//取出一个Entry
Map.Entry<String, String> entry = it.next();
//输出一个Entry
System.out.println(entry.getKey() + "->"+ entry.getValue());
}
4 for-each循环和Iterator的区别
- for-each还能遍历数组,Iterator只能遍历集合
- 使用for-each遍历集合时不能删除元素,会抛出异常ConcurrentModificationException使用Iterator遍历集合时能删除元素