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/

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • apache的安装与配置_apache2.4安装教程

    apache的安装与配置_apache2.4安装教程准备安装包到https://www.apachelounge.com/download/下载你需要的Apache安装包(注意需要相应的VC运行库)解压文件到指定安装目录3.替换安装路径使用文本编辑器打开Apache的配置文件conf/httpd.conf执行文本替换将”c:/Apache24”全部替换成(你自己解压的路径)“G:\web\apache2.4”4

  • 红楼品鉴「建议收藏」

    红楼品鉴「建议收藏」红楼梦曹雪芹(1715-1763)案头文学,很多心理活动,心理描写很成功,特别是黛玉,因此在电视剧中黛玉的角色很难演,但是在戏曲中通过唱词比较好表达。本人强推裴效维评注的红楼梦版本,全套三本,评注很详细,有很多诗词的解释。(一)人物关系贾代善娶了金陵史家的小姐(贾母)宁国府人丁稀少,贾敬很早就到寺庙里炼丹求药,将他的爵位世袭给了贾珍。水字辈、代字辈、文字辈、…

  • 向DropDownList 下拉框添加新选项[通俗易懂]

    向DropDownList 下拉框添加新选项[通俗易懂]    大家有没有遇见过这样的情况,假如有一个下拉框,现在让你在下拉框里面添加一个新的选项如“请选择”,而数据库里面又不存在这一选项》要怎么做,下面为大家推荐两种写法:数据库的表为类别表:createtableLE_FoodType(FoodTypeIDintprimarykeyidentity(1,1),FoodTypeNamenvarchar(50)notnu…

  • WinHttp应用demo

    WinHttp应用demo#include#include#include#pragmacomment(lib,”winhttp”)structcallback_param_t{HINTERNEThInet;DWORDdwErrCert;};staticVOIDCALLBACKSyncCallback(HINTERNET,DWORD_PTR,DWORD,

  • windows环境搭建web服务器(IIS)

    windows环境搭建web服务器(IIS)windows环境下如何搭建web服务器,百度或者谷歌一下都会有很多教程和资源可以参考。这里我也记载一下过程,便于大家参考。至于什么是web服务器,为什么需要web服务器,这里不太明白的也可以百度一下。简单的说就是需要一个能够处理HTTP协议的互联网程序,当做好一个网站后将其放在这个程序包里。如果指定了这个程序所在电脑的IP地址,就可以用浏览器来显示这个网站了。通常这个程序所在的电脑位置我们称之为…

发表回复

您的电子邮箱地址不会被公开。

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