java性能优化之HashMap,LinkedHashMap,TreeMap读取大量数据效率的比较
很多时候,我们用jdbctemplate或mybatis的时候,为了查询通用,会选择使用map数据结构,因为hashmap本身无序,所以为了保证key的有序性,会采用linkedhashmap。所以我们要看一下Linkedhashmap的性能影响多大。如下:
@Test
public void test() {
Integer count =1000000;
Random random =new Random();
Map<String, String> map = new HashMap<String, String>();
for (int i = 0; i < count; i++) {
map.put(i+"", i+"");
}
long time1 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
map.get((random.nextInt(count)+1)+"");
}
long time2 = System.currentTimeMillis();
System.out.println("HashMap time:" + (time2 - time1));
////////////////////////////////////////////////////////////////////////
Map<String, String> linkedMap = new LinkedHashMap<String, String>();
for (int i = 0; i < count; i++) {
linkedMap.put(i+"", i+"");
} time1 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
linkedMap.get((random.nextInt(count)+1)+"");
}
time2 = System.currentTimeMillis();
System.out.println("LinkedHashMap time:" + (time2 - time1));
////////////////////////////////////////////////////////////////////////
Map<String, String> treeMap = new TreeMap<String, String>();
for (int i = 0; i < count; i++) {
treeMap.put(i+"", i+"");
} time1 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
treeMap.get((random.nextInt(count)+1)+"");
}
time2 = System.currentTimeMillis();
System.out.println("TreeMap time:" + (time2 - time1));
}
执行结果:
HashMap time:641
LinkedHashMap time:703
TreeMap time:4040
读取数据是有序,则如下:
@Test
public void test2() {
Integer count =1000000;
Random random =new Random();
Map<String, String> map = new HashMap<String, String>();
for (int i = 0; i < count; i++) {
map.put(i+"", i+"");
}
long time1 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
map.get(i+"");
}
long time2 = System.currentTimeMillis();
System.out.println("HashMap time:" + (time2 - time1));
////////////////////////////////////////////////////////////////////////
Map<String, String> linkedMap = new LinkedHashMap<String, String>();
for (int i = 0; i < count; i++) {
linkedMap.put(i+"", i+"");
} time1 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
linkedMap.get(i+"");
}
time2 = System.currentTimeMillis();
System.out.println("LinkedHashMap time:" + (time2 - time1));
////////////////////////////////////////////////////////////////////////
Map<String, String> treeMap = new TreeMap<String, String>();
for (int i = 0; i < count; i++) {
treeMap.put(i+"", i+"");
} time1 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
treeMap.get(i+"");
}
time2 = System.currentTimeMillis();
System.out.println("TreeMap time:" + (time2 - time1));
}
HashMap time:297
LinkedHashMap time:203
TreeMap time:438
从上可知,LinkedHashMap是可以完全代替HashMap的,不用担心性能问题。
java性能优化之HashMap,LinkedHashMap,TreeMap读取大量数据效率的比较的更多相关文章
- Java中HashMap,LinkedHashMap,TreeMap的区别[转]
原文:http://blog.csdn.net/xiyuan1999/article/details/6198394 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类 ...
- Java HashMap,LinkedHashMap,TreeMap
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- java HashMap,LinkedHashMap,TreeMap应用
共同点: HashMap,LinkedHashMap,TreeMap都属于Map:Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复. 不同点: 1.H ...
- 推荐:Java性能优化系列集锦
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...
- Java 性能优化之 String 篇
原文:http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/ Java 性能优化之 String 篇 String 方法用于文本分析 ...
- 《Java性能优化权威指南》
<Java性能优化权威指南> 基本信息 原书名:Java performance 原出版社: Addison-Wesley Professional 作者: (美)Charlie Hunt ...
- Java 性能优化手册 — 提高 Java 代码性能的各种技巧
转载: Java 性能优化手册 - 提高 Java 代码性能的各种技巧 Java 6,7,8 中的 String.intern - 字符串池 这篇文章将要讨论 Java 6 中是如何实现 String ...
随机推荐
- Spring容器的refresh()介绍
Spring容器的refresh()[创建刷新]; 1.prepareRefresh()刷新前的预处理; 1).initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置 ...
- linux-Windows文件上传Linux
使用Xshell5工具: 1.使用cmd在Windows上压缩文件 2.在Xshell5上使用SSH协议与Linux服务器建立连接 3.新建文件传输 4.切换到Linux文件目录 5.使用put命令进 ...
- MySQL登录时出现 Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: YES) 的原因及解决办法
场景一:调试web程序访问数据库的时候出现 场景二:MySQL登陆的时候,区分本地localhost登陆,以及远程登陆.即使本地能够登陆,如果不授权也无法远程登陆 分析原因:(区分)当本地出现这样的情 ...
- 分页查询——Hibernate Criteria实现一次查询取得总记录数和分页后结果集
使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集 - bto310 - ITeye博客 https://bto310.iteye.com/blog/1 ...
- Odoo中的模型继承、视图继承、Qweb模板继承详解
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826114.html 在实际开发过程中,经常会遇到需要修改Odoo原生逻辑的情况.然而,直接修改Odoo底 ...
- JanusGraph安装graphexp
准备:JanusGraph环境,graphexp源码,nginx 本文采用的环境:JanusGraph + cassandra + ES + GraphExp(cassandra 或者HBase作为后 ...
- 【原】python 检查网站访问是否超时,并用钉钉机器人报警
#!/usr/bin/env python import requests import json import logging webhook="上面创建钉钉机器人的webhook地址&q ...
- JAVA线程池的创建与使用
为什么要用线程池? 我们都知道,每一次创建一个线程,JVM后面的工作包括:为线程建立虚拟机栈.本地方法栈.程序计数器的内存空间(下图可看出),所以线程过多容易导致内存空间溢出.同时,当频繁的创建和销毁 ...
- dfs 全排列 使用交换——含重复元素和非重复元素
15. 全排列 中文 English 给定一个数字列表,返回其所有可能的排列. 样例 样例 1: 输入:[1] 输出: [ [1] ] 样例 2: 输入:[1,2,3] 输出: [ [1,2,3], ...
- 【Android Studio】 资源下载
Gradle各版本集合 http://services.gradle.org/distributions/ Android Studio各版本集合 http://www.android-studio. ...