java中的HashMap类的遍历
示例代码如下:
1 public class HashMapBianLiTest { 2 public static void main(String[] args) { 3 // hashMap的遍历 4 HashMap hashMap = new HashMap(); 5 hashMap.put("张晋","蔡少芬"); 6 hashMap.put("王宝强","马蓉"); 7 hashMap.put("宋儿","马蓉"); 8 hashMap.put("宋儿","元明"); // 覆盖【替换】 9 10 // 第一种方式:KeySet 11 // 静态内部类:class java.util.HashMap$KeySet 12 Set keySet = hashMap.keySet(); 13 // 1.1 14 Iterator iterator = keySet.iterator(); 15 while (iterator.hasNext()) { 16 Object obj = iterator.next(); 17 System.out.println(obj + ": " + hashMap.get(obj)); 18 } 19 // 1.2 20 for (Object o : keySet) { 21 System.out.println(o + ": " + hashMap.get(o)); 22 } 23 24 // 第二种方式:values【只能遍历value】 25 // 静态内部类:class java.util.HashMap$Values 26 Collection values = hashMap.values(); 27 // 2.1 28 Iterator iterator1 = values.iterator(); 29 while (iterator1.hasNext()) { 30 Object next = iterator1.next(); 31 System.out.println(next); 32 } 33 // 2.2 34 for (Object value : values) { 35 System.out.println(value); 36 } 37 38 // 第三种方式:entrySet 39 // 静态内部类:class java.util.HashMap$EntrySet 40 // hashMap中的k-v,先转成一个Node类型【HashMap的静态成员内部类】的节点,将数个节点,放到EntrySet集合中。 41 // Node类型:static class Node<K,V> implements Map.Entry<K,V>【作用域在同一包下】 42 Set set = hashMap.entrySet(); 43 // 3.1 44 Iterator iterator2 = set.iterator(); 45 while (iterator2.hasNext()) { 46 // obj: class java.util.HashMap$Node 47 // 向下转型,调用Map.Entry<k,v>的方法 48 Object obj = iterator2.next(); 49 // 由于HashMap的静态成员内部类中的Node作用域是在同一包下,因此无法使用HashMap.Node, 50 // 但是Node implements Map.Entry<K,V>,因此可以用Map.Entry接口来转型, 51 // 通过动态绑定机制,调用Node类对象的已经实现的方法。 52 Map.Entry map = (Map.Entry) obj; 53 System.out.println(map.getKey() +": " + map.getValue()); 54 55 // System.out.println(next);// Node重写了toString() 56 } 57 // 3.2 58 for (Object o : set) { 59 System.out.println(o); 60 } 61 62 } 63 }
如果想要有更加深入的理解,请debug查看源码。