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 ...
随机推荐
- git commit 之后,撤销commit操作
撤销.修改commit 写代码过程中,如果已经git add [files] git -m commit [files],没有push代码到远程仓库,想撤销commit,可以根据实际情况,使用以下参数 ...
- prometheus学习系列六: Prometheus relabel配置
relabel_config 重新标记是一个功能强大的工具,可以在目标的标签集被抓取之前重写它,每个采集配置可以配置多个重写标签设置,并按照配置的顺序来应用于每个目标的标签集. 目标重新标签之后,以_ ...
- Centos系统的升级
文章来源:https://blog.csdn.net/kikajack/article/details/79396793 系统及内核版本: [root@node5 ~]# cat /etc/redha ...
- Jmeter跨线程组传递cookie,以禅道系统为例;BeanShell的存取数据的使用
先看下脚本结构: 思路:将登陆请求放在setUp Thread Group中:把登陆后的cookie通过正则提取出来,然后存为全局变量,传递到下一个线程组中: 第一步:添加setUp Thread G ...
- nginx编译安装以及配置tcp转发
依赖包安装 yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl open ...
- 项目Beta冲刺(团队)——博客集合
项目Beta冲刺(团队)--博客集合 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:集中记录所有Beta敏捷冲刺日志的集 ...
- flask实战-个人博客-程序骨架、创建数据库模型、临接列表关系 --
编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin) ...
- Linux 系统结构,nglinx
Linux 系统结构 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统. N ...
- Codeforces Round #603 (Div. 2) C. Everyone is a Winner! (数学)
链接: https://codeforces.com/contest/1263/problem/C 题意: On the well-known testing system MathForces, a ...
- Docker for Window 数据库路径注意事项
Windows和Linux的文件路径格式不同,以第一行为例的话要改为//D/work/fronent-api:/www //D:标识D盘,如果是其他盘,如F盘://F/