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 简要介绍
HashMap 是 Java 中最常用的 Map 实现类,它根据键的 HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap 最多只允许一条记录的键为 Null;允许多条记录的值为 Null。HashMap 不支持线程...
主要介绍了 java HashMap,TreeMap与LinkedHashMap的详解的相关资料,这里提供实例代码,帮助大家学习理解 这部分的内容,需要的朋友可以参考下
主要介绍了在Java中如何决定使用 HashMap 还是 TreeMap,很多朋友对这样的问题很迷茫,下面小编给大家带来一篇文章帮助大家了解,需要的朋友可以参考下
本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素是一个单链表的头节点,链表用来解决hash地址冲突问题。...
主要介绍了从源码的角度浅析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...
红黑树的应用非常广泛,例如 Epoll 实现、Java 集合中的 TreeSet 和 TreeMap、C++ STL 中的 set、map,以及 Linux 虚拟内存的管理,都是通过红黑树去实现的。 红黑树在 HashMap 中的应用可以提高查找、插入和删除...
* JAVA中的集合框架,包括ArrayList、LinkedList、HashMap、TreeMap等 IO流 * JAVA中的IO流,包括文件输入/输出、网络输入/输出、BufferedReader、BufferedWriter等 多线程 * JAVA中的多线程编程,包括Thread、...
java map排序,hashmap,linkedmap,treemap,hashtable
2) 掌握Java集合框架的映射的概念以及映射的两种基本实现:HashMap,TreeMap; 3)掌握枚举类型以及枚举集、枚举映射的概念以及他们的实现; 实验内容 1)Java集合框架中几种具体实现的使用:ArrayList, LinkedList,...
Collection 和 Map 是 Java 中的两种基本容器类型,它们都可以用来存储和管理对象,但它们有着不同的特点和用途。 Collection 是一种聚集对象的容器,每个位置只能保存一个元素。Collection 的主要实现类有 List 和...