【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源码的时候发现了一个没思考过的问题,在这之前可以说是完全没有思考过这个问题,在一开始对这个点有疑问的时候也没有想到居然有这么个语法细节存在,弄得我百思不得其解,直到自己动手做实验改 ...
随机推荐
- Linux服务器管理员必备Linux命令TOP5
Linux桌面环境的界面友好度.图形性能及附件工具已经大幅进化,然而Linux服务器却还没有能达到这一步. 作为系统管理员必须熟练掌握Linux命令.Linux命令的内容很多,其中的一些TOP命令对于 ...
- Python框架之Django学习笔记(三)
开始一个项目 第一次使用 Django,必须进行一些初始化设置工作. 新建一个工作目录,例如 D:\tool\python\Python27\workspace\djcode,然后进入该目录. 转到创 ...
- 56、使用android studio(v1.3.*)修改包名 (rename package name)
一.修改包名 ①选中目录,开始构造 在弹窗中选中Rename directory 在弹窗中选中Rename package 填写新的包名,点击Refactor 如果有警告,不用管它,直接点击Do Re ...
- leetcode 【 Container With Most Water 】python 实现
题目: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, a ...
- ActionContext源码
/* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, ...
- c++ 中pair类模板的用法详解
pair: 头文件:#include<utility> 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类 ...
- 【转】UGUI EventSystem
EventSystem The EventSystem is a way of sending events to objects in the application based on inpu ...
- 一道背包神题-Petrozavodsk Winter-2018. Carnegie Mellon U Contest Problem I
题目描述 有\(n\)个物品,每个物品有一个体积\(v_i\),背包容量\(s\).要求选一些物品恰好装满背包且物品个数最少,并在这样的方案中: (1)求出中位数最小的方案的中位数(\(k\)个元素的 ...
- 洛谷4438 [Hnoi2018]道路 【树形dp】
题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ...
- 浅谈C++三层架构
浅谈C++三层架构 三层架构并不是MVC,MVC是一个很早就有的经典的程序设计模式,M-V-C分为三层,M(Model)-V(View)-C(Control). web开发中的三层架构是指:数据访问层 ...