简单谈hashmap hashtable linkedhashmap treemap的区别

原创 2016年08月30日 19:48:57

hashmap

继承dictionary;线程不同步。如果想使用同步可以使用collections.syschronizedMap或者concurrentHashMap进行同步,允许一个键为null,随机读取数据,读取速度快

 @Test
	public void testHashMap() {
		HashMap<Integer, String> map = new HashMap<Integer, String>();
		// 在map中存入10000个键值对
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			map.put(i, "hashvalue " + i);
		}
		long end = System.currentTimeMillis();
		long insertTime=end-start;
		start = System.currentTimeMillis();
		// 输出结果
		for (Integer key : map.keySet()) {
			System.out.println("key:" + key.valueOf(key) + "  value:"
					+ map.get(key));
		}
		end = System.currentTimeMillis();
		System.out.println("size:" + map.size());
		System.out.println("输入花费总时间:" + (insertTime));
		System.out.println("输出花费总时间:" + (end - start));
		
		map.clear();
		map.put(null, "测试键可以为null");
		System.out.println(map.get(null));
	}


结论:

从程序结果中可以看出,读取的数据是随机的。一个键可以为null

hashtable

继承dictionary;线程同步。不允许为null, 

@Test
	public void testHashtable() {
		Hashtable<Integer, String> map = new Hashtable<Integer, String>();
		// 在map中存入10000个键值对
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			map.put(i, "hashvalue " + i);
		}
		long end = System.currentTimeMillis();
		long insertTime=end-start;
		start = System.currentTimeMillis();
		// 输出结果
		for (Integer key : map.keySet()) {
			System.out.println("key:" + key.valueOf(key) + "  value:"
					+ map.get(key));
		}
		end = System.currentTimeMillis();
		System.out.println("size:" + map.size());
		System.out.println("输入花费总时间:" + (insertTime));
		System.out.println("输出花费总时间:" + (end - start));
		map.clear();
		map.put(null, "测试键可以为null");
		System.out.println(map.get(null));
	}

结论:

读取数据使用散列方式排列,键不能为空,编译可以通过。运行会包空指针异常

linkedhashmap

保存了记录的插入顺序,也是按顺序排列的,


@Test
	public void testLinkedHashMap() {
		LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
		// 在map中存入10000个键值对
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			map.put(i, "hashvalue " + i);
		}
		long end = System.currentTimeMillis();
		long insertTime = end - start;
		start = System.currentTimeMillis();
		// 输出结果
		for (Integer key : map.keySet()) {
			System.out.println("key:" + key.valueOf(key) + "  value:"
					+ map.get(key));
		}
		end = System.currentTimeMillis();
		System.out.println("size:" + map.size());
		System.out.println("输入花费总时间:" + (insertTime));
		System.out.println("输出花费总时间:" + (end - start));
		map.clear();
		map.put(null, "测试键可以为null");
		System.out.println(map.get(null));
	}



结论:

Linkedhashmap输出的顺序和输入的相同按顺序排列,Linkedhashmap继承hashmap 所有他的键可以有一个值为null,

treemap

采用的是红黑树算法的实现。按自然排序的升序进行排序。

@Test
	public void testTreeMap() {
		TreeMap<Integer, String> map = new TreeMap<Integer, String>();
		// 在map中存入10000个键值对
		long start = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			map.put(i, "hashvalue " + i);
		}
		long end = System.currentTimeMillis();
		long insertTime = end - start;
		start = System.currentTimeMillis();
		// 输出结果
		for (Integer key : map.keySet()) {
			System.out.println("key:" + key.valueOf(key) + "  value:"
					+ map.get(key));
		}
		end = System.currentTimeMillis();
		System.out.println("size:" + map.size());
		System.out.println("输入花费总时间:" + (insertTime));
		System.out.println("输出花费总时间:" + (end - start));
		map.clear();
		map.put(null, "测试键可以为null");
		System.out.println(map.get(null));
	}



Treemap的键不能为null 查询出来的数据是按顺序排列输出


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HashMap、TreeMap、Hashtable、LinkedHashMap区别

HashMap 如果有重复的key,则将旧数据进行替换,允许设置key和value为null,key存放是乱序的,线程非同步,访问速度快,因为它根据key的HashCode 值来存储数据 public...

HashMap、LinkedHashMap、Hashtable和TreeMap用法和区别

Java为数据结构中的映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap、HashTable、LinkedHashMap和TreeMap。本节实例主要介绍这4中实例的用...

JAVA HashMap,LinkedHashMap,TreeMap,HashTable 的区别

java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa...
  • klov001
  • klov001
  • 2012年05月07日 20:39
  • 761

HashMap TreeMap Hashtable LinkedHashMap 区别

map是java中最常用的数据结构之一,在这篇文中,我将说明如何使用不同类型的maps,比如:HashMap,TreeMap,HashTable和LinkedHashMap。 Map概览 在jav...

java中HashMap,LinkedHashMap,TreeMap,HashTable,ConcurrentHashMap的区别和内部实现机制

首先简单介绍下,这几种map的应用场景: HashMap 存储键值对,没有什么特殊的功能; LinkedHashMap在存储的同时,能够保存用户插入数据的顺序,如果需要输出用户插入map的顺序可以...

HashMap、HashTable、LinkedHashMap和TreeMap用法和区别

Java为数据结构中的映射定义了一个接口java.util.Map,它有四个实现类,分别是HashMap、HashTable、LinkedHashMap和TreeMap。本节实例主要介绍这4中实例的用...

【code】各种Map的区别(HashMap,HashTable,LinkedHashMap,TreeMap)

由于现在项目中用到了LinkedHashMap,并不是太熟悉就到网上搜了一下。 import java.util.HashMap; import java.util.Iterator; impor...

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

java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa...

ArrayList 、LinkList、List 区别 & 迭代器iterator的使用 & HashMap、Hashtable、LinkedHashMap、TreeMap

1.大学数据结构中ArrayList是实现了基于动态数组的数据结构,LinkList基于链表的数据结构。  2.对于随机访问get和set,ArrayList优于LinkList,因为LinkedLi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单谈hashmap hashtable linkedhashmap treemap的区别
举报原因:
原因补充:

(最多只允许输入30个字)