简单谈hashmap hashtable linkedhashmap treemap的区别
2016-08-30 19:48
543 查看
hashmap
继承dictionary;线程不同步。如果想使用同步可以使用collections.syschronizedMap或者concurrentHashMap进行同步,允许一个键为null,随机读取数据,读取速度快
结论:
从程序结果中可以看出,读取的数据是随机的。一个键可以为null
hashtable
继承dictionary;线程同步。不允许为null,
结论:
读取数据使用散列方式排列,键不能为空,编译可以通过。运行会包空指针异常
linkedhashmap
保存了记录的插入顺序,也是按顺序排列的,
结论:
Linkedhashmap输出的顺序和输入的相同按顺序排列,Linkedhashmap继承hashmap 所有他的键可以有一个值为null,
treemap
采用的是红黑树算法的实现。按自然排序的升序进行排序。
Treemap的键不能为null 查询出来的数据是按顺序排列输出
继承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 Hashtable LinkedHashMap和TreeMap区别
- HashMap Hashtable LinkedHashMap TreeMap的区别
- java map的区别 -- HashMap Hashtable LinkedHashMap 和TreeMap
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap、TreeMap、LinkedHashap的区别与用法
- HashMap/Hashtable/LinkedHashMap/TreeMap三者的区别
- HashMap Hashtable LinkedHashMap 和TreeMap区别
- HashMap / Hashtable / LinkedHashMap / TreeMap的区别
- HashMap\ Hashtable\LinkedHashMap\TreeMap的区别
- HashMap TreeMap Hashtable LinkedHashMap 区别
- Vector、ArrayList、LinkedList、HashMap、TreeMap、HashTable 区别
- HashMap Hashtable LinkedHashMap 和TreeMap区别
- hashMap hashTable TreeMap linkedHashMap区别
- HashMap、TreeMap、LinkedHashMap、hashtable的区别
- HashMap,LinkedHashMap,Hashtable,TreeMap等区别
- Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
- HashMap、TreeMap、LinkedHashMap、hashtable的区别
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
- Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
- HashMap、Hashtable、LinkedHashMap 和TreeMap区别
- Vector和ArrayList,LinkedList,Hashtable,HashMap的区别