`
epy
  • 浏览: 324487 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java中TreeMap VS HashMap

阅读更多

Key是长度为11String, ValueShort

HashMap使用default load factor (0.75).

 

Size100000

TreeMap 占用了8.91M内存;search 100000 times, usedTime: 268ms.

HashMap占用了9.65M内存;search 100000 times, usedTime: 54ms.

 

Size1000000

TreeMap 占用了91.5M内存;search 100000 times, usedTime: 636ms.

HashMap占用了95.88M内存;search 100000 times, usedTime: 83ms.

 

在数据量为十万到百万之间时,HashMap占用的内存比TreeMap多了5%-8%,查询时间只有TreeMap13%-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里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    比较Java原生的 3种Map的效率。 1. TreeMap 2. HashMap 3. ConcurrentSkipListMap 本测试查找方法使用Map的get方法,循环、离散获取。对于ConcurrentSkipListMap,获得顺序片段,可用subMap()方法,提取50w的子序列...

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    Java中HashMap和TreeMap的区别深入理解

    首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value

    treemap treeset hashset hashmap 简要介绍

    treemap treeset hashset hashmap 简要介绍

    java HashMap,TreeMap与LinkedHashMap的详解

    主要介绍了 java HashMap,TreeMap与LinkedHashMap的详解的相关资料,这里提供实例代码,帮助大家学习理解 这部分的内容,需要的朋友可以参考下

    在Java中如何决定使用 HashMap 还是 TreeMap

    主要介绍了在Java中如何决定使用 HashMap 还是 TreeMap,很多朋友对这样的问题很迷茫,下面小编给大家带来一篇文章帮助大家了解,需要的朋友可以参考下

    java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较

    主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下

    java-hashmap:Java HashMap的插图

    Java HashMap的插图 Java HashMap ...插图7:使用TreeMap对未排序的HashMap进行排序 关于项目 该项目包括样本NetBeans项目,该项目说明了Java HashMap类。 关于开发商 示例NetBeans项目作为一个示例,

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器...另包含一篇网文:在java中使用TreeMap进行中文排序

    Java TreeMap 源码解析

    继上篇文章介绍完了HashMap,这篇文章开始介绍Map系列另一个比较重要的类TreeMap。 大家也许能感觉到,网络上介绍HashMap的文章比较多,但是介绍TreeMap反而不那么多,这里面是有原因:一方面HashMap的使用场景比较...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解4:HashMap和HashTable Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb

    移植Java代码到C++的技巧(整合)

    相比于Java,C++的STL也提供了map容器,其功能等同于Java中的TreeMap,至于HashMap,它并没有进入C++标准模板库。而幸运的是,现有的主流C++编译器供应商均提供了标准模板库的扩展包,并在该扩展包中实现了hash_map...

    java map实例,排序

    java map排序,hashmap,linkedmap,treemap,hashtable

    高级编程-java实验报告.docx

    2) 掌握Java集合框架的映射的概念以及映射的两种基本实现:HashMap,TreeMap; 3)掌握枚举类型以及枚举集、枚举映射的概念以及他们的实现; 实验内容 1)Java集合框架中几种具体实现的使用:ArrayList, LinkedList,...

    Java面试题深入解析:在互联网公司面试程序员需要留意的六个问题.docx

    # Java面试题深入解析:在互联网公司面试程序员需要留意的六个问题 在互联网公司中,Java程序员是极为重要的角色,因此Java面试题也是非常重要的一环。...HashMap和TreeMap的区别是什么等等。 ## 4.

    实验05 Java集合.doc

    4)了解Map接口及主要实现类(HashMap、TreeMap、HashTable) 二、实验内容及步骤 1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 ...

    JDBM3, 嵌入式 key-value Java数据库.zip

    JDBM3, 嵌入式 key-value Java数据库 注意:这个项目处于维护模式,我将精力转向 JDBM4,...JDBM提供由磁盘存储备份的TreeMap,HashMap和其他集合。 现在你可以处理数十亿项而不用耗尽内存。 JDBM可能是最快和simpliest

    java中map的使用实例

    java中map简单实例,包含插入,读出,遍历代码。内含map使用实例及HashMap,LinkedHashMap,TreeMap的区别

    javalruleetcode-JavaNotes:Java笔记

    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 ...

Global site tag (gtag.js) - Google Analytics