【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式
参考链接:https://www.cnblogs.com/crazyacking/p/5573528.html
==================================
java紫色代表迭代方式
效率测试:100W
==================================
HashMap迭代方式1:entrySet迭代
public static void main(String[] args) {
Map<String,String> hashMap = new HashMap<>();
long beginTime = System.currentTimeMillis();
System.out.println("hashMap存储开始时间-->"+beginTime);
for (int i = 0; i < ; i++) {
hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
}
long endTime = System.currentTimeMillis();
System.out.println("hashMap存储结束时间-->"+endTime);
System.out.println("hashMap存储消耗:"+(endTime-beginTime)+"ms");
System.out.println("hashMap【entrySet方式】读取开始时间-->"+endTime);
//可以使用外部定义变量
for (Map.Entry<String,String> entry : hashMap.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
long endTime2 = System.currentTimeMillis();
System.out.println("hashMap【entrySet方式】读取结束时间-->"+endTime2);
System.out.println("hashMap【entrySet方式】读取消耗:"+(endTime2-endTime)+"ms");
}


===================================================================
HashMap迭代方式2:keySet迭代
public static void main(String[] args) {
Map<String,String> hashMap = new HashMap<>();
long beginTime = System.currentTimeMillis();
System.out.println("hashMap存储开始时间-->"+beginTime);
for (int i = 0; i < ; i++) {
hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
}
long endTime = System.currentTimeMillis();
System.out.println("hashMap存储结束时间-->"+endTime);
System.out.println("hashMap存储消耗:"+(endTime-beginTime)+"ms");
System.out.println("hashMap【keySet方式】读取开始时间-->"+endTime);
//可以使用外部定义变量
Set<String> keySet = hashMap.keySet();
for (String s : keySet) {
System.out.println(s+":"+hashMap.get(s));
}
long endTime2 = System.currentTimeMillis();
System.out.println("hashMap【keySet方式】读取结束时间-->"+endTime2);
System.out.println("hashMap【keySet方式】读取消耗:"+(endTime2-endTime)+"ms");
}


=================================================================
HashMap迭代方式3:forEach方式
public static void main(String[] args) {
Map<String,String> hashMap = new HashMap<>();
long beginTime = System.currentTimeMillis();
System.out.println("hashMap存储开始时间-->"+beginTime);
for (int i = 0; i < ; i++) {
hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
}
long endTime = System.currentTimeMillis();
System.out.println("hashMap存储结束时间-->"+endTime);
System.out.println("hashMap存储消耗:"+(endTime-beginTime)+"ms");
System.out.println("hashMap【forEach方式】读取开始时间-->"+endTime);
//不能使用外部定义变量 除非final类型 例如:List
hashMap.forEach((k,v)->{
System.out.println(k +":"+v);
});
long endTime2 = System.currentTimeMillis();
System.out.println("hashMap【forEach方式】读取结束时间-->"+endTime2);
System.out.println("hashMap【forEach方式】读取消耗:"+(endTime2-endTime)+"ms");
}


=======================================================================================================
TreeMap迭代:entrySet方式
public static void main(String[] args) {
Map<String,String> hashMap = new TreeMap<>();
long beginTime = System.currentTimeMillis();
System.out.println("TreeMap存储开始时间-->"+beginTime);
for (int i = 0; i < 1000000; i++) {
hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
}
long endTime = System.currentTimeMillis();
System.out.println("TreeMap存储结束时间-->"+endTime);
System.out.println("TreeMap存储消耗:"+(endTime-beginTime)+"ms");
System.out.println("TreeMap【entrySet方式】读取开始时间-->"+endTime);
//可以使用外部定义变量
for (Map.Entry<String,String> entry : hashMap.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
long endTime2 = System.currentTimeMillis();
System.out.println("TreeMap【entrySet方式】读取结束时间-->"+endTime2);
System.out.println("TreeMap【entrySet方式】读取消耗:"+(endTime2-endTime)+"ms");
}


=================================================
TreeMap迭代:keySet方式
public static void main(String[] args) {
Map<String,String> hashMap = new TreeMap<>();
long beginTime = System.currentTimeMillis();
System.out.println("TreeMap存储开始时间-->"+beginTime);
for (int i = 0; i < 1000000; i++) {
hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
}
long endTime = System.currentTimeMillis();
System.out.println("TreeMap存储结束时间-->"+endTime);
System.out.println("TreeMap存储消耗:"+(endTime-beginTime)+"ms");
System.out.println("TreeMap【keySet方式】读取开始时间-->"+endTime);
//可以使用外部定义变量
Set<String> keySet = hashMap.keySet();
for (String s : keySet) {
System.out.println(s+":"+hashMap.get(s));
}
long endTime2 = System.currentTimeMillis();
System.out.println("TreeMap【keySet方式】读取结束时间-->"+endTime2);
System.out.println("TreeMap【keySet方式】读取消耗:"+(endTime2-endTime)+"ms");
}


==========================================================
TreeMap迭代:forEach方式
public static void main(String[] args) {
Map<String,String> hashMap = new TreeMap<>();
long beginTime = System.currentTimeMillis();
System.out.println("TreeMap存储开始时间-->"+beginTime);
for (int i = 0; i < 1000000; i++) {
hashMap.put(UUID.randomUUID().toString(),UUID.randomUUID().toString());
}
long endTime = System.currentTimeMillis();
System.out.println("TreeMap存储结束时间-->"+endTime);
System.out.println("TreeMap存储消耗:"+(endTime-beginTime)+"ms");
System.out.println("TreeMap【forEach方式】读取开始时间-->"+endTime);
//不能使用外部定义变量 除非final类型 例如:List
hashMap.forEach((k,v)->{
System.out.println(k +":"+v);
});
long endTime2 = System.currentTimeMillis();
System.out.println("TreeMap【forEach方式】读取结束时间-->"+endTime2);
System.out.println("TreeMap【forEach方式】读取消耗:"+(endTime2-endTime)+"ms");
}


=========================================================
100W级别
基本判断【并不准确】:HashMap存储效率高,读取效率也比较高
TreeMap存储效率低,读取效率差不多
=========================================================
1000W级别
【java】TreeMap/HashMap的循环迭代中 keySet和entrySet和forEach方式 + map的几种迭代方式的更多相关文章
- 细说java中Map的两种迭代方式
曾经对java中迭代方式总是迷迷糊糊的,今天总算弄懂了.特意的总结了一下.基本是算是理解透彻了. 1.再说Map之前先说下Iterator: Iterator主要用于遍历(即迭代訪问)Collecti ...
- 大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法
具体见第三阶段scala-day01中的文档(scala编程基础---基础语法) 1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html): ...
- JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))
JavaScript高级编程——Array数组迭代(every().filter().foreach().map().some(),归并(reduce() 和reduceRight() )) < ...
- Map中keySet和entrySet的区别
在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键, ...
- java map在JSTL EL中的小应用--<c:forEach>遍历Map<>泛型
准 备 数 据 :(自己准备吧少年,考验你时候到了!!) /** 结构示意图: 类型: List集合 map对象 LIst集合 Person类对象 String name : int age mLis ...
- Java中Map的4种遍历方式
第一种方式:这是平常用的最多也最可取的一种遍历方式. for (Map.Entry<String, Object> entry : map.entrySet()) { System.out ...
- 空数组在以下三种遍历中均不可更改:forEach、map和for...in
首先,我们要知道对于forEach.map和for...in三种遍历,在不是空数组的情况下,要想实现更改原数组的方法,代码如下: var list = [1,2,3,4]; var list1 = [ ...
- Java 程序测试_循环语句中的break和continue
package test; public class Loop_Statement { public static void main(String [] args) { String[] newba ...
- 实在没想到系列——HashMap实现底层细节之keySet,values,entrySet的一个底层实现细节
我在看HashMap源码的时候发现了一个没思考过的问题,在这之前可以说是完全没有思考过这个问题,在一开始对这个点有疑问的时候也没有想到居然有这么个语法细节存在,弄得我百思不得其解,直到自己动手做实验改 ...
随机推荐
- Asp.net自定义控件开发任我行(8)-数据集绑定
摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...
- ios开发第一步--虚拟机安装MAC OS X
暂时还没买Macbook,先用虚拟机练练手. 先说说准备工作,我是在win8下安装的,这个不是关键的,只要Vmware版本和MAC OS X版本确定就行了,win7下同样可以. 1.虚拟机Vmware ...
- OV7725学习之SCCB协议(一)
OV7725摄像头只能作为从机,通过SCCB协议配置内置的172个寄存器.因此首先要了解的就是SCCB总线 1.SCCB协议简述 SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO ...
- [oldboy-django][4python面试]有关yield那些事
1 yield 在使用send, next时候的区别(举例m = yield 5) 无论send,next首先理解m = yield 5 是将表达式"yield 5 "的结果返回给 ...
- 来自知乎的pthread_cond_wait为什么总是带着mutex
来自https://www.zhihu.com/question/24116967?q=linux%20%E5%A4%9A%E7%BA%BF%E7%A8%8B%20%E8%99%9A%E5%81 ...
- caffe-dnnh实验
下面是我在做基于深度哈希的大规模图像检索中的一个实验,相关文档介绍给大家,具体内容查看提供的相关链接,总结的很到位了,我就不再赘述. 实践cvpr2015年的深度哈希图像检索论文:Simultaneo ...
- 【bzoj1520】[POI2006]Szk-Schools 费用流
题目描述 输入 输出 如果有可行解, 输出最小代价,否则输出NIE. 样例输入 5 1 1 2 3 1 1 5 1 3 2 5 5 4 1 5 10 3 3 3 1 样例输出 9 题解 费用流 设xi ...
- CF 964C Alternating Sum
给定两正整数 $a, b$ .给定序列 $s_0, s_1, \dots, s_n,s_i$ 等于 $1$ 或 $-1$,并且已知 $s$ 是周期为 $k$ 的序列并且 $k\mid (n+1)$,输 ...
- 【21】vuex 与element iu表单校验
转:http://www.cnblogs.com/gsgs/p/6753682.html element-ui的官网上写的自定义表单验证,方法都是写在单vue文件中的,不容易共享.怎么使用vuex将方 ...
- iOS工程中一天只让进行一次的操作如何做?
转至: iosNSDateNSObject一天一次 整体思路:当进行操作的时候记录操作时间存在偏好设置当中,当再次点击的时候获取现在的时间然后和之前记录的时间进行比较.如果是一天那么就提示“今天 ...