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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c酒店管理系统代码_酒店管理系统

    c酒店管理系统代码_酒店管理系统主要功能:1.添加员工信息2.显示员工信息3.删除员工信息4.修改员工信息5.查找员工信息6.员工信息排序7.清空数据(1)显示数据(2)修改数据(3)查找数据(4)信息排序部分代码展示:workerManager.cpp。需要完整代码可以留邮箱,有时间就发#include”stdafx.h”#include”work…

    2022年9月24日
    1
  • acwing-91. 最短Hamilton路径(状态压缩dp)

    acwing-91. 最短Hamilton路径(状态压缩dp)给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j])。对于任意的 x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]≥a[x,z]。输出格式输出一个整数,表示最短 Ha

    2022年8月9日
    6
  • SSM框架原理,作用及使用方法

    SSM框架原理,作用及使用方法作用:SSM框架是springMVC,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层使用springMVC负责请求的转发和视图管理spring实现业务对象管理,mybatis作为数据对象的持久化引擎原理:SpringMVC:1.客户端发送请求到DispacherServ

    2022年7月12日
    17
  • oracle错误 904,IMP-00058: 遇到 ORACLE 错误 904

    oracle错误 904,IMP-00058: 遇到 ORACLE 错误 904我将A服务器下的导入B服务器时其中一个表出现以下错误,出错误后我单独将这个表导出,然后导入。B服务器下已有T_CALLREORDS表,并且已有新数据,T_CALLREORDS有外键约束T_USER表。我的语句如下C:UsersAdministrator>impgxcfkefu/gxcfkefufull=yfile=e:/gxcf_T_CAL…显示全部我将A服务器下的导入B服务器时…

    2022年9月20日
    2
  • MATLAB图像识别_多模态图像配准

    MATLAB图像识别_多模态图像配准基于SIFT特征的图像配准(附Matlab源代码) 本文先给出了采用SIFT方法进行图像配准的实验原图以及实验结果,最后附上Matlab源代码。 实验一:      实验一的图像(见图1.1)是本人自己拍摄的,然后由软件裁剪成400×400像素而成,其中参考图像和待配准图像之间有重叠部分,且具有一定的旋转。这是一般难度的图像配准。

    2025年5月29日
    3
  • Android触屏事件流[通俗易懂]

    Android触屏事件流[通俗易懂]一次触屏事件分为三个动作ACTION_DOWN,ACTION_MOVE和ACTION_UP。其中ACTION_DOWN和ACTION_UP在一次触屏事件中只会触发一次,ACTION_MOVE可能触发任意次(包括0次)。主要响应触屏的组件有两种,一种是可以包含子元素的(ViewGroup比如LinearLayout),另一种是不能包含子元素的View(最底层的View比

    2025年10月18日
    2

发表回复

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

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