1.增强for循环其实就是一种语法糖;
2.快捷键:需要遍历的集合对象.for即可;
3.所以之前的hashMap的很自然的多出来的第三种以及第四种的遍历方式;
4.在集合之中增强for循环调用的就是迭代器,此处调试时需要在迭代器中打断点,debug就可以证明;
5.数组可以使用增强for循环的,但是此处的增强for循环使用的就是for循环而不是迭代器,可以通过编译之后的文件查看;
package com.ydlclass.collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapTest {
public static void main(String[] args) {
HashMap<String,Integer> hashMap = new HashMap<>(16);
hashMap.put("a",1);
hashMap.put("b",2);
//HashMap中迭代器的几种使用方法:
//1.通过先获取hashMapkeySet()方法的到键的集合;
Set<String> keySet = hashMap.keySet();
Iterator<String> iterator1 = keySet.iterator();//keySet集合先获得迭代器;
while (iterator1.hasNext()){
String key = iterator1.next();
System.out.println("key = " + key);
System.out.println("value= " + hashMap.get(key));//使用get方法并且使用了key的获取对应的值;
}
//2.方式二:
Set<Map.Entry<String, Integer>> entries = hashMap.entrySet();//键值对集合,entry其实类似于node节点,他是一个接口;此处是一个函数,这个函数的主要工作是:把每一对key—value
//打包成一个实例对象entry集合;这个集合中每个对象是一个entry对象,每个对象封装了key-value;
Iterator<Map.Entry<String, Integer>> iterator2 = entries.iterator();
//错误的做法
//while(iterator2.hasNext()){
// System.out.println("iterator2.next().getKey() = " + iterator2.next().getKey());
// System.out.println("iterator2.next().getValue() = " + iterator2.next().getValue());
//}
//上面的方式产生问题的原因在于:两句话中分别调用了next方法,导致了不是同一个对象;
//正确的方法:
while (iterator2.hasNext()){
Map.Entry<String, Integer> next = iterator2.next();
System.out.println("next.getKey() = " + next.getKey());
System.out.println("next.getValue() = " + next.getValue());
}
//第三种遍历方式
for (String s : hashMap.keySet()) {
System.out.println(s + " = " + hashMap.get(s));
}
//第四种遍历方式
for (Map.Entry<String, Integer> stringIntegerEntry : hashMap.entrySet()) {
System.out.println(stringIntegerEntry.getKey() + " = " + stringIntegerEntry.getValue());
}
}
}