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());
        }

    }
}