我们为什么需要迭代器Iterator?
在集合的使用过程中,我们经常需要遍历集合,Java的迭代器Iterator,提供了一种统一的快捷的遍历容器方式。
遍历Collection
遍历List
List中的实现类,都是有下标的,所以可以通过for循环来遍历。此外还可以通过foreach循环,以及迭代器Iterator遍历,以ArrayList为例:
public class Test {
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
//for循环
System.out.println("------------------for循环----------------");
for(int i = 0;i<list.size();i++) {
System.out.println(list.get(i));
}
//foreach
System.out.println("------------------foreach----------------");
for (String string : list) {
System.out.println(string);
}
//迭代器Iterator
System.out.println("------------------迭代器Iterator----------------");
for(Iterator<String> iter= list.iterator();iter.hasNext();){
String str = iter.next();
System.out.println(str);
}
}
}
-----------------------------------------------------------
输出结果为:
[a, b, c]
------------------for循环----------------
a
b
c
------------------foreach----------------
a
b
c
------------------迭代器Iterator----------------
a
b
c
遍历Set
Set中的实现类,都是没有下标的,所以不可以通过for循环来遍历。但可以通过foreach循环,以及迭代器Iterator遍历,以HashSet为例:
public class Test {
public static void main(String args[]) {
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
System.out.println(set);
//foreach
System.out.println("------------------foreach----------------");
for (String string : set) {
System.out.println(string);
}
//迭代器Iterator
System.out.println("------------------迭代器Iterator----------------");
for(Iterator<String> iter= set.iterator();iter.hasNext();){
String str = iter.next();
System.out.println(str);
}
}
}
-------------------------------------------------------------------
输出结果为:
[a, b, c]
------------------foreach----------------
a
b
c
------------------迭代器Iterator----------------
a
b
c
遍历Map
Map中的实现类,都是以键值对的形式来存储的,在遍历时有两种思路:
- 1.通过取出Map中的Key值,将所有Key值作为一个Set集合。然后遍历这个Set集合,在遍历时,通过map的get方法,传入key值,从而取出对应的value。
- 2.通过将Map的Entry节点作为一个Set集合取出来,然后遍历这个Set结合,在遍历过程中,通过Entry的getKey()方法,取出key,用 entry的getValue()方法,取出Value。
以HashMap为例,实例:
public class Test {
public static void main(String args[]) {
Map<Integer,String> map = new HashMap<>();
map.put(1,"a");
map.put(2,"b");
map.put(3,"c");
System.out.println("map:"+map);
//迭代器Iterator,把map中的key取出来,作为Set,然后类似Set遍历,用map的get()方法,取出key对应的value
System.out.println("------------------key----------------");
Set<Integer> keySet = map.keySet(); //取出map的key,作为一个set集合
for(Iterator<Integer> iter= keySet.iterator();iter.hasNext();){
Integer str = iter.next();
System.out.println("key:"+str+"-value:"+map.get(str));
}
//迭代器Iterator,把map中的Entry取出来,作为Set,然后类似Set遍历,用 entry的getKey()方法,取出key,用 entry的getValue()方法,取出Value
System.out.println("----------------Entry------------------");
Set<Entry<Integer, String>> entrySet = map.entrySet(); //取出map的entry,作为一个set集合
for(Iterator<Entry<Integer, String>> iter= entrySet.iterator();iter.hasNext();){
Entry<Integer, String> entry = iter.next();
System.out.println("key:"+entry.getKey()+"-value:"+entry.getValue());
}
}
}
-----------------------------------------------------------
输出结果为:
map:{1=a, 2=b, 3=c}
------------------key----------------
key:1-value:a
key:2-value:b
key:3-value:c
----------------Entry------------------
key:1-value:a
key:2-value:b
key:3-value:c