java中的HashMap类的遍历

导读:本篇文章讲解 java中的HashMap类的遍历,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

示例代码如下:

 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查看源码。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/98963.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!