Key是长度为11的String, Value是Short。
HashMap使用default load factor (0.75).
Size为100000:
TreeMap 占用了8.91M内存;search 100000 times, usedTime: 268ms.
HashMap占用了9.65M内存;search 100000 times, usedTime: 54ms.
Size为1000000:
TreeMap 占用了91.5M内存;search 100000 times, usedTime: 636ms.
HashMap占用了95.88M内存;search 100000 times, usedTime: 83ms.
在数据量为十万到百万之间时,HashMap占用的内存比TreeMap多了5%-8%,查询时间只有TreeMap的13%-20%,因此在这一应用场景下,HashMap是较好的选择。
测试代码如下:
import java.util.HashMap; import java.util.Random; import java.util.TreeMap; public class TreeMapVSHashMap { private static Random random = new Random(); private static Random random2 = new Random(); private static final int SIZE = 100000; private static final int GETCNT = 100000; /** * @param args */ public static void main(String[] args) { TreeMapTest(); // HashMapTest(); } public static void TreeMapTest() { System.out.println("\nTreeMap Test"); System.gc(); printHeapMemoryInfo(); TreeMap<String, Short> trMap = new TreeMap<String, Short>(); int i = 0; Short val; while (i < SIZE) { val = trMap.put(getRandomPhone(), (short)(i%4)); if (val == null) { i++; } } System.out.println("size : " + trMap.size()); System.gc(); printHeapMemoryInfo(); long startTime = System.currentTimeMillis(); for (i=0; i<GETCNT; i++) { trMap.get(getRandomPhone2()); } System.out.println("search " + GETCNT + " times, usedTime: " + (System.currentTimeMillis() - startTime) + "ms."); } public static void HashMapTest() { System.out.println("\nHashMap Test"); System.gc(); printHeapMemoryInfo(); HashMap<String, Short> hashMap = new HashMap<String, Short>(); int i = 0; Short val; while (i < SIZE) { val = hashMap.put(getRandomPhone(), (short)(i%4)); if (val == null) { i++; } } System.out.println("size : " + hashMap.size()); System.gc(); printHeapMemoryInfo(); long startTime = System.currentTimeMillis(); for (i=0; i<GETCNT; i++) { hashMap.get(getRandomPhone2()); } System.out.println("search " + GETCNT + " times, usedTime: " + (System.currentTimeMillis() - startTime) + "ms."); } /** * 返回一个手机号码,有十亿种可能性,(中国移动用户总数约十亿) * @return */ public static String getRandomPhone() { return String.valueOf(13000000000L + random.nextInt(1000000000)); } /** * 返回一个测试手机号码,有十亿种可能性,(中国移动用户总数约十亿) * @return */ public static String getRandomPhone2() { return String.valueOf(13000000000L + random2.nextInt(1000000000)); } public static void printHeapMemoryInfo() { Runtime runtime = Runtime.getRuntime(); System.out.printf("maxMemory : %.2fM\n", runtime.maxMemory()*1.0/1024/1024); System.out.printf("totalMemory : %.2fM\n", runtime.totalMemory()*1.0/1024/1024); System.out.printf("freeMemory : %.2fM\n", runtime.freeMemory()*1.0/1024/1024); System.out.printf("usedMemory : %.2fM\n", (runtime.totalMemory()-runtime.freeMemory())*1.0/1024/1024); } }
相关推荐
比较Java原生的 3种Map的效率。 1. TreeMap 2. HashMap 3. ConcurrentSkipListMap 本测试查找方法使用Map的get方法,循环、离散获取。对于ConcurrentSkipListMap,获得顺序片段,可用subMap()方法,提取50w的子序列...
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value
treemap treeset hashset hashmap 简要介绍
主要介绍了 java HashMap,TreeMap与LinkedHashMap的详解的相关资料,这里提供实例代码,帮助大家学习理解 这部分的内容,需要的朋友可以参考下
主要介绍了在Java中如何决定使用 HashMap 还是 TreeMap,很多朋友对这样的问题很迷茫,下面小编给大家带来一篇文章帮助大家了解,需要的朋友可以参考下
主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下
Java HashMap的插图 Java HashMap ...插图7:使用TreeMap对未排序的HashMap进行排序 关于项目 该项目包括样本NetBeans项目,该项目说明了Java HashMap类。 关于开发商 示例NetBeans项目作为一个示例,
// java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器...另包含一篇网文:在java中使用TreeMap进行中文排序
继上篇文章介绍完了HashMap,这篇文章开始介绍Map系列另一个比较重要的类TreeMap。 大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较...
Java集合详解4:HashMap和HashTable Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb
相比于Java,C++的STL也提供了map容器,其功能等同于Java中的TreeMap,至于HashMap,它并没有进入C++标准模板库。而幸运的是,现有的主流C++编译器供应商均提供了标准模板库的扩展包,并在该扩展包中实现了hash_map...
java map排序,hashmap,linkedmap,treemap,hashtable
2) 掌握Java集合框架的映射的概念以及映射的两种基本实现:HashMap,TreeMap; 3)掌握枚举类型以及枚举集、枚举映射的概念以及他们的实现; 实验内容 1)Java集合框架中几种具体实现的使用:ArrayList, LinkedList,...
# Java面试题深入解析:在互联网公司面试程序员需要留意的六个问题 在互联网公司中,Java程序员是极为重要的角色,因此Java面试题也是非常重要的一环。...HashMap和TreeMap的区别是什么等等。 ## 4.
4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 ...
JDBM3, 嵌入式 key-value Java数据库 注意:这个项目处于维护模式,我将精力转向 JDBM4,...JDBM提供由磁盘存储备份的TreeMap,HashMap和其他集合。 现在你可以处理数十亿项而不用耗尽内存。 JDBM可能是最快和simpliest
java中map简单实例,包含插入,读出,遍历代码。内含map使用实例及HashMap,LinkedHashMap,TreeMap的区别
java lru leetcode Java笔记 我在工作和学术期间写的 Java 注释和备忘单 通用Java HashMap 与 TreeMap HashMap : the hash map we know TreeMap : maintain a red - black tree internally, not O( 1 ) lookup, but ...