JAVA遍历map的几种实现方法代码
发布时间:2023-08-27 22:06:04
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方法。


猜你喜欢
- Java 17 更新了,作为一个 10 年的 Java 程序员,还是有亿点点兴奋的,Kotlin 的群里面也是各种讨论 Java 的新特性。
- 任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的th
- Android传感器概述:动作传感器、环境传感器、位置传感器等,如方向传感器(电子罗盘)、重力传感器(横纵切换)。Android SDK支持
- Android实现界面内嵌多种卡片视图,具体内容如下效果如图所示:1.选择某个界面时,对应的第几个小圆点亮:通过selector制造圆点和进
- mybatis自动生成代码(实体类、Dao接口等)是很成熟的了,就是使用mybatis-generator插件。 它是一个开源的插件,使用m
- 本文演示android中图片加载到内存首先设计界面:代码如下:<LinearLayout xmlns:android="ht
- Java执行cmd命令//当前绝对路径System.out.println(IoUtil.read(Runtime.getRuntime()
- 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后
- 本文总览本篇来学习Kotlin循环结构的知识1. While循环while循环用于重复迭代代码块,只要给定条件为 true就会执行一次循环代
- 既然是一个网关。那么全局过滤器肯定是少不了的一个存在。像是鉴权、认证啥的不可能每个服务都做一次,一般都是在网关处就搞定了。Zuul他就有很强
- JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送
- 在Java的学习中,涉及到两个系统环境变量path和classpath一. path环境变量path环境变量是系统环境变量的一种,它用于保存
- 笔者在网上发现了,很多种方法 ,当然咱们找最好用的,也简单的 下面废话不多说直接上代码 我在啰嗦几句 第一这个脚本挂在需要相应的游戏体上 第
- 一、问题描述在使用idea Jrebel续期的时候,修改idea激活服务器地址时,遇到报错:Cannot reactivate, offli
- Synchronized的用法在多线程并发问题中,常用Synchronized锁解决问题。Synchronized锁通常用于同步示例方法,同
- OpenFeign介绍一开始,我们使用原生的 DiscoveryClient 发现服务和使用RestTemplate进行服务间调用,然后我们
- 本文实例讲述了.NET/C#实现识别用户访问设备的方法。分享给大家供大家参考,具体如下:一、需求需要获取到用户访问网站时使用的设备,根据不同
- 前言前不久遇到一个问题,是公司早期的基础库遇到的,其实很低级,但是还是记录下来。出错点是一个 IO 流的写入bug,我们项目会有一种专有的数
- 本文所述为基于C#实现的三层架构。对于三层的概念查相信大家并不陌生,这里举一个关于三层的简单实例,真正看一下它是如何具体实现的.我们先来一起
- 没有阿里云数据库的可以买个最便宜的,我是新用户9.9元买了一个1.买到后点击左上角的工作台2.3. 4. 5.6.7.8