A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

遍历Map的方法, 我总结了5种, CoreJava中给出的是第一种使用forEach+lambda表达式, 我认为这种方法应该是最好的, 但是只能在Java8之后的版本使用;

建议优先使用第一种和第四种(类似第二种);

遍历Map:
第一种可以使用Map的forEach方法加上Java8的lambda表达式:

aMap.forEach( (k,v)->{System.out.println(k+" "+v);} );
1
第二种可以使用Map.Entry来遍历Map的条目:

for(Map.Entry<String, String> it : aMap.entrySet()){
        System.out.println(it.getKey()+"="+it.getValue());
        System.out.println(it);
}
1
2
3
4
第三种可以使用for结合Map的keySet和values方法来遍历:

for(String a : aMap.keySet()){
        System.out.println(a);
}
for(String a : aMap.values()){
        System.out.println(a);
}
1
2
3
4
5
6
第四种是使用迭代器, 这种是看起来比较熟悉而且效率挺高的, 但是要注意, 不能在使用for循环访问迭代器的同时使用remove操作, javadoc说这样会发生不可预期的错误, 如果希望迭代的同时删除元素, 可以使用while来遍历:

for(Iterator<Map.Entry<String, String>> it = aMap.entrySet().iterator();it.hasNext();){
        Map.Entry<String, String> itt = it.next();
        System.out.println(itt.getKey()+"="+itt.getValue());
        System.out.println(itt);
}
1
2
3
4
5
当然还有第五种是在遍历keySet的时候调用get方法获取对应的值, 但是这种方法太捞了, 效率很低, 不提了, 就上一段测试代码吧:

for(String i : aMap.keySet()){
        System.out.println(i+"="+aMap.get(i));
}
1
2
3
测试代码如下:

import java.util.*;

class test16 {
        public static void main(String[] args) {
                Map<String,String> aMap = new TreeMap<>();
                aMap.put("Aluka", "AluWife");
                aMap.put("GodV", "mifengaaa");
                aMap.put("zz", "lym");
                aMap.forEach( (k,v)->{System.out.println(k+" "+v);} );
                System.out.println();
                aMap.remove("zz");
                for(Map.Entry<String, String> it : aMap.entrySet()){
                        System.out.println(it.getKey()+"="+it.getValue());
                        System.out.println(it);
                }
                System.out.println();
                for(String a : aMap.keySet()){
                        System.out.println(a);
                }
                for(String a : aMap.values()){
                        System.out.println(a);
                }
                System.out.println();
                for(Iterator<Map.Entry<String, String>> it = aMap.entrySet().iterator();it.hasNext();){
                        Map.Entry<String, String> itt = it.next();
                        System.out.println(itt.getKey()+"="+itt.getValue());
                        System.out.println(itt);
                }
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
输出如下:

Aluka AluWife
GodV mifengaaa
zz lym

Aluka=AluWife
Aluka=AluWife
GodV=mifengaaa
GodV=mifengaaa

Aluka
GodV
AluWife
mifengaaa

Aluka=AluWife
Aluka=AluWife
GodV=mifengaaa
GodV=mifengaaa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
贴一些map和sortedmap的常用方法:


---------------------
【转载】
作者:Peiwen123
原文:https://blog.csdn.net/qq_3398223 ... 187?utm_source=copy


3 个回复

倒序浏览
奈斯
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马