javajava中遍历mapp几种简单方法

Java中遍历Map的各种方式 - 简书
Java中遍历Map的各种方式
在遍历Map集合之前首先先定义一个Map对象:
Map&String, String& map = new LinkedHashMap&String, String&();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "fore");
map.put("5", "five");
这个地方使用的是LinkedHashMap,主要是为了确保让map中的元素是按照插入的顺序存放的。
1. 使用keySet()方法遍历
使用keyset方法遍历,是先取出map的key组成的Set集合,通过对Set集合的遍历,然后使用map.get(key)方法取出value值。
for (String key : map.keySet()) {
System.out.println(key + " : " + map.get(key));
2. 使用map的values()方法遍历集合的values
map.values()返回的是由map的值组成的Collection,这个方法只能遍历map的所有value,不能得到map的key。
for (String value : map.values()) {
System.out.println(value);
3. 使用map的entrySet()方法遍历
使用map的entrySet()方法返回一个以Entry为元素的Set集合,然后对Set集合进行遍历。
for (Entry&String, String& entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " +
entry.getValue());
4. 通过keySet()返回的集合的iterator遍历
由于map.keySet()返回的是一个Set集合,所以通过它的iterator()方法返回一个迭代器,通过迭代器遍历map。
Iterator&String& it = map.keySet().iterator();
while(it1.hasNext()) {
String key = it1.next();
System.out.println(key + " : " + map.get(key));
5. 通过values()返回的Collection的iterator遍历
map.values()方法返回的是一个Collection对象,这个集合对象可以使用iterator方法访问。
Iterator&String& it = map.values().iterator();
while(it1.hasNext()) {
String key = it1.next();
System.out.println(key + " : " + map.get(key));
6. 通过entrySet()返回的Set的iterator遍历
同上,map.entrySet()方法返回的是一个Set&Entry&String, String>>类型的集合,可以使用iterator来访问该集合。
Iterator&Entry&String, String&& it =
map.entrySet().iterator();
while(it3.hasNext()) {
Entry&String, String& entry = it3.next();
System.out.println(entry.getKey() + " : " +
entry.getValue());
以上总结了对map集合的集中遍历方式,根据自身需要灵活选择使用哪种方式。
写优雅的代码,过平淡的生活。
本篇文章带你从Java源码深入解析关于Java容器的概念。 参考文献: Java容器相关知识全面总结 Java官方API文档 1 常用容器继承关系图 先上一张网上的继承关系图 个人觉得有些地方不是很准确,比如Iterator不是容器,只是一个操作遍历集合的方法接口,所以不应...
1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法。 1、一个&.java&源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个publ...
一 Set List Map的定义 1. 什么是set Set的功能方法 Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行...
Collection ├List │├LinkedList │├ArrayList │└Vector │└Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个C...
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
断断续续花了十天粗略的把这本五百多页的书过了一遍。这是一本比哲学书浅薄,比心灵鸡汤的书又有实质内容。无法形容读此书的滋味,书里都是一些简短的句子组成,确有很多金玉良言。周国平老师像一个慈祥的老者,在耳边絮絮叨叨的诉说着人生的种种思考,倒是让人感觉无比亲切。此书的作用确实引...
爱的传递定律 第一幕 会议室,几个组员、组长以及部长正在就一个议题讨论着。不过,确实有人明显心不在焉。 “X君!”被点名者明显一愣,不确定的开口“部长,怎么咯?” “你是不是昨晚没有休息好?”部长发问。 “不会呀,我一向睡得很早,作息很有规律的。没事啦?”部长还没有解释为什...
或许有些人就从未真心待你,是自己自作多情想多了,以为你把人家当朋友真心对待,人家就会在意你,其实你在人家心中或许从未存在,别傻了,与其委曲求全,狼狈不堪的讨好别人,不如自己学会孤独,在黑夜里高傲的活出属于自己的样子。薛之谦的《丑八怪》里的那句:如果世界漆黑,其实我很美。勇敢...
BBC News 1.The French interior minister 法国内政部长 2.detain扣留 detained goods扣留货物 3.on suspicion of 怀疑 Los Angeles police have arres...
“坐车给车钱,渡船给船钱,想蒙混过关,门儿也没有!”
大伯威严地站在船头,两只硕大的眼珠子骨碌碌在人群中转动,一缕银灰色的山羊胡子不停地在河口风中颤抖,大嘴一张,把一串冰凉梆硬的话砸在等船人的耳膜上。
“大伯,忙着那!”
我扶了扶鼻梁上的眼镜...博客分类:
在java中有很多种方法来遍历map。接下来我们就回顾下最常用的方法,并且比较下他们的优缺点。 各种map 在java中都实现了map接口,下面的方法适合任何一种map,只要是实现了map接口的。像hashmap,treemap,LinkeHashMap,Hashtable等等。
方法#1:通过循环entries 来遍历map这种方法是最通用和效率比较好的方法。适合同时需要map的key 和value的情况。
Map&String, String& map = new HashMap &String, String&();
Iterator&Map.Entry&String, String&& entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry&String, String& entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
由于foreach循环是在java5开始有的,所以这种方法适合比较新的版本。而且这个循环会抛空指针错误,如果你循环的map 为null,所以使用时候要检查是否为null.
通过循环key和value 来遍历如果你只是需要map的key或者values ,你可以循环遍历entrySet的keySet或者values
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
//iterating over keys only
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}//iterating over values only
for (Integer value : map.values()) {
System.out.println("Value = " + value);
方法#3 使用迭代器 iterator通常:
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
Iterator&Map.Entry&Integer, Integer&& entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry&Integer, Integer& entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer) entry.getKey();
Integer value = (Integer) entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
你可以使用同样的方法去迭代keyset和values.
这种方法看起来很繁琐,但是他有他的优势。首先这个是唯一的使用老版本的map的迭代方法。其次这也是唯一一个允许在迭代过程中通过iterator.remove()来删除map中的数据。如果你试图在foreach方法中进行删除操作,你会得到预料不到的结果。
从性能方面来说,这个方法与foreach循环相当。
方法#4 通过遍历key来获取对应的value
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
这个方法可以认为是方法#1的缩减版,但是从实际来看,这种方法是非常慢和效率低下的,因为通过key来获取value是比较耗时的。(这种方法对不同的map实现会比第一种方法慢20%--200%)。如何你有安装findbugs,你就可以检测到。鉴于效率来说,这个方法需要避免使用。
结论:如何你只需要keys或者只需要values,使用方法#2.如果你是老的版本,并且有删除操作的使用方法#3。其他使用#1.
浏览: 1389356 次
来自: 北京
楼主。使用分布式session后,能解决freemarker无 ...
代码报异常啊
mysql的注释符号“-- ”,“#”,“/**/”要加上吗? ...
Thanks for sharing!
多谢楼主分享!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'JAVA遍历map的几种实现方法代码
转载 &更新时间:日 16:33:12 & 作者:
这篇文章主要介绍了JAVA遍历map的几种实现方法,有需要的朋友可以参考一下
代码如下:public static void main(String args[]) {  Map&String, Object& map = new HashMap&String, Object&();  map.put("a", "A");  map.put("b", "B");  map.put("c", "C");  // keySet遍历  Iterator&String& iterator = map.keySet().iterator();  while (iterator.hasNext()) {    String key = iterator.next();    String value = (String) map.get(key);    System.out.println(value);  }  for (String key : map.keySet()) {    String value = (String) map.get(key);    System.out.println(value);  }  // entrySet遍历  Iterator&Entry&String, Object&& iterator1 = map.entrySet().iterator();  while (iterator1.hasNext()) {    String value = (String) iterator1.next().getValue();    System.out.println(value);  }
  for (Entry&String, Object& entry : map.entrySet()) {    String value = (String) entry.getValue();    System.out.println(value);  }  //  for (Object str : map.values()) {    System.out.println(str);  }}
关于效率问题:
如果你使用HashMap
同时遍历key和value时,keySet与entrySet方法的性能差异取决于key的具体情况,如复杂度(复杂对象)、离散度、冲突率等。换言之,取决于HashMap查找value的开销。entrySet一次性取出所有key和value的操作是有性能开销的,当这个损失小于HashMap查找value的开销时,entrySet的性能优势就会体现出来。例如上述对比测试中,当key是最简单的数值字符串时,keySet可能反而会更高效,耗时比entrySet少10%。总体来说还是推荐使用entrySet。因为当key很简单时,其性能或许会略低于keySet,但却是可控的;而随着key的复杂化,entrySet的优势将会明显体现出来。当然,我们可以根据实际情况进行选择只遍历key时,keySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间。在上述测试结果中,keySet比entrySet方法耗时少23%。只遍历value时,使用vlaues方法是最佳选择,entrySet会略好于keySet方法。
如果你使用TreeMap
同时遍历key和value时,与HashMap不同,entrySet的性能远远高于keySet。这是由TreeMap的查询效率决定的,也就是说,TreeMap查找value的开销较大,明显高于entrySet一次性取出所有key和value的开销。因此,遍历TreeMap时强烈推荐使用entrySet方法。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Java中如何遍历Map对象的4种方法
欢迎扫码加入Java高知群交流
在Java中如何遍历Map对象
How to Iterate Over a Map in Java
在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。
既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)
方法一 在for-each循环中使用entries来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
for (Map.Entry&Integer, Integer& entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
//遍历map中的键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
//遍历map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方法三使用Iterator遍历
使用泛型:
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
Iterator&Map.Entry&Integer, Integer&& entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry&Integer, Integer& entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}不使用泛型:
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}你也可以在keySet和values上应用同样的方法。
该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
方法四、通过键找值遍历(效率低)
Map&Integer, Integer& map = new HashMap&Integer, Integer&();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。
如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。
欢迎扫码加入Java高知群交流
扫码向博主提问
非学,无以致疑;非问,无以广识
没有更多推荐了,主要介绍HashMap的四种循环遍历方式,各种方式的性能测试对比,根据HashMap的源码实现分析性能结果,总结结论
点击广告支持我
我维护的 Android 经验分享的公众号
最新 Android 高薪内推
点击下面广告支持我
阿里、滴滴 2018 高薪内推
那些著名开源库的原理分析
(159,869)(132,191)(114,402)(110,573)(105,600)(104,941)(101,325)(91,400)(79,695)(79,075)
阿里、滴滴 2018 高薪内推
站内推荐文章

我要回帖

更多关于 java map循环遍历 的文章

 

随机推荐