HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历
我们先来做一个测试
public class HashMapTest {
private HashMap<String, String> map = new HashMap<>();
@Before
public void beforeAllMethodTestInClass() {
for (int i = 0; i < 100000; i++) {
map.put("a" + i, "aa" + i);
map.put("b" + i, "bb" + i);
map.put("c" + i, "cc" + i);
map.put("d" + i, "dd" + i);
}
}
@Test
public void entrySetTest() {
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
long startTime = System.currentTimeMillis();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println(entry.getKey() + "=" + entry.getValue());
}
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}
@Test
public void keySetTest() {
Iterator<String> it = map.keySet().iterator();
long startTime = System.currentTimeMillis();
while (it.hasNext()) {
String key = it.next();
System.out.println(key + "=" + map.get(key));
}
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}
}
多次测试,我们可以发现方法keySetTest()时间大约为2s809ms,
而entrySetTest()只有2s98ms,从测试上来说,后者运行时间小于前者。
原来,因为entrySet遍历的时候,存放的是Map.Entry<T, T>类型,
意思是,在进行遍历的时候已经把key、value放入其中。
而keySet遍历的时候,存放的是T类型,
意思是,在进行遍历的时候只放了key值,
倘若我还需要value,就还需要使用 public V get(Object key) 方法
注:本博客旨在记录,不作任何商用,如有侵犯,请联系博主(1258971228@qq.com)删除!
HashMap中推荐使用entrySet方式遍历Map类集合KV而不是keySet方式遍历的更多相关文章
- java 遍历map 方法 集合 五种的方法
package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...
- Map类集合遍历
- 高度注意 Map 类集合 K/V 能不能存储 null 值的情况
集合类 Key Value Super 说明 Hashtable 不允许为 null 不允许为 null Dictionary 线程安全 ConcurrentHashMap 不允许为 null 不允许 ...
- Map类集合
集合类 Key Value ...
- Java中应该返回零长度数组或空集合,而不是返回null(转)
说明:为了避免在数组和集合的获取上增加null的判断,同时也能减少不必要的空指针异常,通常会在业务返回零数组或空集合. 方法: 1.数组: 定义全局静态常量来减少内存开销:private static ...
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)
- java 遍历Map的四种方式
java 遍历Map的四种方式 CreationTime--2018年7月16日16点15分 Author:Marydon 一.迭代key&value 第一种方式:迭代entrySet 1 ...
- Java之五种遍历Map集合的方式
摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历. 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历.这篇文章主要给大家介 ...
- 遍历map的几种方式
1,平时开发中对map的使用很多,然后发现了很多map可能存在的各种问题:如HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize ...
随机推荐
- Linux实现树莓派3B的国密SM9算法交叉编译——(三)国密SM9算法实现
先参考这篇文章 Linux实现树莓派3B的国密SM9算法交叉编译——(二)miracl库的测试与静态库的生成 进行miracl库的交叉编译测试,并生成miracl静态链接库. 这篇文章主要介绍基于mi ...
- redis集群(Sentinel)
问题 Redis 主哨兵模式是如何保证高可用的 主要依赖主哨兵的发现故障和故障转移 概述 本文假设读者对redis 的主从复制已经进行了了解 . Redis 主哨兵集群为Redis 提供了高可用,即高 ...
- linux 配置LVM
1. 阿里云挂载LVM目录(创建LVM,以及配置第一块硬盘) fdisk /dev/vdb 输入 n p 1 enter enter wq pvcreate /dev/vdb1 vgcreate lv ...
- 蓝桥杯2016年省赛C/C++大学A组
网友年龄 某君新认识一网友. 当问及年龄时,他的网友说: "我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄" 请你计算:网友的年龄一 ...
- 【代码学习】PYTHON 线程
一.使用threading模块多线程执行 可以明显看出使用了多线程并发的操作,花费时间要短很多 创建好的线程,需要调用start()方法来启动 #coding=utf-8 import threadi ...
- celery task - 2
# celery task 前言 讨论一个定时任务,一般而言,需要的功能如下: 封装成对象,独立执行: 对象有一些接口,便于了解它的状态: 定时调用: 行为控制,包括重试,成功/失败回调等: 下面分别 ...
- Spring IoC(三)bean属性、方法注释
1.环境配置 使用注解开发jdk1.5.Spring2.5支持,在xml中添加context相关的是四个配置; <beans default-lazy-init="true" ...
- Robot Framework高级
一.Web自动化测试 二.C/S自动化测试 三.数据库自动化测试 四.接口自动化测试 五.RF内置测试库 六.持续集成内置测试库 七.移动自动化测试 八.自定义RF
- 【PAT甲级】1096 Consecutive Factors (20 分)
题意: 输入一个int范围内的正整数,输出它最多可以被分解为多少个连续的因子并输出这些因子以*连接. trick: 测试点5包含N本身是一个素数的数据,此时应当输出1并把N输出. 测试点5包含一个2e ...
- MYSQL命令练习及跳过数据库密码进行密码重新设置
2.看当前所有数据库:show databases; 3.进入mysql数据库:use mysql; 4.查看mysql数据库中所有的表:show tables; 5.查看user表中的数据: ...