List中迭代
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
// 通过集合的iterator()方法获取迭代器对象,并将迭代器与集合绑定
// 表示这个迭代器迭代的是这个集合
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
注意:在迭代的过程中不能对集合进行增删改,会由于不确定性发生
ConcurrentModificationException
解决方法:使用listIterator
步骤:
(1)通过list的litIterator()获取适使用listIterator对象
(2)使用listIterator的方法对集合进行改动
List<String> list2 = new ArrayList<>();
list2.add("java");
list2.add("python");
list2.add("H5");
list2.add("c");
System.out.println(list2);
ListIterator<String> it = list2.listIterator();
while (it.hasNext()) {
String n = it.next();
if (n.equals("python")) {
//set等同于下面2行代码
//it.remove();
//it.add("c++");
it.set("c++");
}
}
System.out.println(list2);
[java, python, H5, c]
[java, c++, H5, c]
Map的迭代:
Map不能使用普通循环和增强for循环
原因是:map不是数组,也不是iterable的实例,map不同于list,set,list、set都继承了collection,而collection继承了Iterable,所以list和set都是iterable的实例,不仅可以获取iterator对象,还能使用增强for循环。
KeySet():返回这个map集合中的键的set的集合
entrySet():
因为map获取不到iterator方法,所有用下面的两个方法
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("A", 1);
map.put("C", 2);
map.put("F", 3);
map.put("D", 4);
map.put("B", 4);
// 通过keySet方法获取map集合中所有键组成的集合
Set<String> set = map.keySet();
// 通过set的iterator方法获取set集合的迭代器对象
Iterator<String> it = set.iterator();
// 循环判断并获取
while(it.hasNext()){
String key = it.next();
System.out.println(key +" = "+ map.get(key));
}
Map<String, String> map = new HashMap<String, String>();
map.put("王宝强", "马蓉");
map.put("李晨", "范冰冰");
map.put("文章", "马伊琍");
map.put("刘恺威", "杨幂");
// 通过map的entrySet方法获取map中所有键值对的映射关系所组成的set集合
Set<Map.Entry<String, String>> set = map.entrySet();
// 通过set的iterator方法获取迭代器对象
Iterator<Map.Entry<String, String>> it = set.iterator();
// 循环判断并获取
while(it.hasNext()){
Map.Entry<String, String> en = it.next();
String key = en.getKey();
String value = en.getValue();
System.out.println(key +" - "+ value);
}