hashmap遍历的几种方法_图的两种遍历

hashmap遍历的几种方法_图的两种遍历方法1:使用For-Each迭代entries这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法Mapmap=newHashMap();for(Map.Entryentry:map.entrySet()){ System.out.println(“key=”+entry.getKey()+”,valu

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

方法1:使用For-Each迭代entries

这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法

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循环是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。

方法2 使用For-Each迭代keys和values

如果你只需要用到map的keys或values时,你可以遍历KeySet或者values代替entrySet

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

这个方法比entrySet迭代具有轻微的性能优势(大约快10%)并且代码更简洁

方法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

这个似乎有点多余但它具有自己的优势。首先,它是遍历老java版本map的唯一方法。另外一个重要的特性是可以让你在迭代的时候从map中删除entries的(通过调用iterator.remover())唯一方法.如果你试图在For-Each迭代的时候删除entries,你将会得到unpredictable resultes 异常。

从性能方法看,这个方法等价于使用For-Each迭代

方法4 迭代keys并搜索values(低效的)

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接口的map中比方法#1慢20%-200%)。如果你安装了FindBugs,它将检测并警告你这是一个低效的迭代。这个方法应该避免

代码演示:

package com.gcc.interview;import java.util.HashMap;import java.util.Iterator;import java.util.Map;/** * HashMap 不同遍历方法比较 * @author gcc * * 2018年1月22日 */public class TestHashMap {	public static void main(String[] args) {		Map<Integer,String> map =new HashMap<Integer,String>();		map.put(1, "xiao");		map.put(2, "chao");		map.put(3, "shang");		map.put(4, "xue");		//方法一		for(Map.Entry<Integer,String> entry : map.entrySet()) {			System.out.println("方法一:key ="+entry.getKey()+"---value="+entry.getValue());		}				//方法二		for(Integer key:map.keySet()) {			System.out.println("方法二:key = "+key);		}				for(String value:map.values()) {			System.out.println("方法二:value = "+value);		}		//方法三		Iterator<Map.Entry<Integer,String>> entries = map.entrySet().iterator();		while(entries.hasNext()) {			Map.Entry<Integer,String> entry = entries.next();			System.out.println("方法三:key = "+entry.getKey()+"--value="+entry.getValue());		}				//方法四		for(Integer key:map.keySet()) {			String value = map.get(key);			System.out.println("方法四:Key = " + key + ", Value = " + value);		}	}			}
可以根据不同需求选择不同遍历方法,但一般选择第一种方法就可以。

作者:scgyus

转载请注明出处:http://blog.csdn.net/scgyus/

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195420.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux发包工具igmp_jar打包命令

    linux发包工具igmp_jar打包命令1.pktgen简介:pktgen是Linux内核里包含的一个高性能发包工具,主要用来测试网络性能。一般情况下,使用pktgen就可以满足千兆网卡的测试需要,不必花钱购买昂贵的硬件发包设备。pktgen运行在“内核态”,并不占用太多的系统资源,就可以达到非常高的发包速率。pktgen只支持UDP发包(端口9)。因为pktgen是一个非常底层测试工具,而且一般是测试网络设备的…

    2022年9月6日
    3
  • -‘0’是什么意思_c语言中a是什么意思

    -‘0’是什么意思_c语言中a是什么意思是c语言中的位运算符:取反.0在内存中的存储方式是所有位为0,0000000000000000那么按位取反后位16个1(如果整形在你的机器上站16位),那么表示的数为-1.转载于:https://www.cnblogs.com/reality-soul/p/6141519.html…

    2022年9月20日
    0
  • Ubuntu 64位 16.04 Minnet安装及测试,可视化工具调试,抓包工具wireshark安装及测试

    Ubuntu 64位 16.04 Minnet安装及测试,可视化工具调试,抓包工具wireshark安装及测试

    2021年9月26日
    59
  • Java操作MongoDB

    Java操作MongoDB

    2022年3月12日
    62
  • VBoxManage 命令详解

    VBoxManage 命令详解查看当前虚拟机VBxoManagelistvms查看当前正在运行的虚拟机VBoxManagelistrunningvms启动虚拟机VBoxManagestartvm虚拟机名无前端图形界面方式启动虚拟机VBoxManagestartvm虚拟机名–typeheadless使用VRDP方式通过命令行启动虚拟机:(3389)VBoxManagestartvm…

    2022年6月11日
    29
  • Elasticsearch 简介[通俗易懂]

    Elasticsearch 简介[通俗易懂]Elasticsearch是一个非常强大的搜索引擎。它目前被广泛地使用于各个IT公司。Elasticsearch是由Elastic公司创建并开源维护的。它的开源代码位于https://github.com/elastic/elasticsearch。同时,Elastic公司也拥有Logstash及Kibana开源项目。这个三个开源项目组合在一起,就形成了ELK软件栈。他们三个共同形成了一个强大的…

    2022年7月18日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号