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 ...
随机推荐
- 使用代码获得Hybris Commerce里显示的产品图片
使用下面这个API去取Hybris Commerce系统里产品主数据的明细信息: https://:9002/rest/v2/electronics/products/300938?fields=FU ...
- windows自动化-脚本案例
; Script Start - Add your code below here Run("D:\Navicat Premium\navicat.exe") Sleep(1000 ...
- 无法读取例程 &ROUTINE 中配置文件选项 FND_DEVELOPER_MODE
问题描述:OM>发运>事务处理,进入此界面,FORM出现报错信息:无法读取例程 &ROUTINE 中配置文件选项 FND_DEVELOPER_MODE 解决办法:在系统管理员下,设 ...
- aws centos系统磁盘扩容
growpart /dev/xvda 1 展开修改后的分区(注意是:空格 1,而非打错了) # ext3/4 1.resize2fs /dev/xvda1 将分区调整为新的卷容量 # xfs分区 2 ...
- 【异常】Zipkin server java.lang.IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter containing tag keys [meth
解决办法: 添加下面配置就OK #zipkin启动报错无法访问的解决方法 management.metrics.web.server.auto-time-requests: false
- Docker 修改容器内的时区
利用docker发布服务,发现 程序用获取的系统时间比正常时间晚了8个小时 进入容器 docker exec -it /bin/sh 查询时间 date -R 发现时区为0时区 解决思路 1.复制相应 ...
- SpringCloud2.0 Feign 服务发现 基础教程(五)
1.启动[服务中心]集群,即 Eureka Server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) 2.启动[服务提供者]集群,即 Eureka Cli ...
- 牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)
A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) usin ...
- Properties 取值和设置函数 Hashtable的静态内部类Entry的结构和克隆方法
- CF379C-New Year Ratings Change
https://www.luogu.org/problemnew/show/CF379C 一道水题,折腾了我好久! 解题: 先排序,从小到大挨个满足客户,把最终rating放进集合里,判断是否已经给出 ...