简单谈hashmap hashtable linkedhashmap treemap的区别
来源:互联网 发布:腾讯视频播放器mac 编辑:程序博客网 时间:2024/06/07 15:53
hashmap
继承dictionary;线程不同步。如果想使用同步可以使用collections.syschronizedMap或者concurrentHashMap进行同步,允许一个键为null,随机读取数据,读取速度快
@Testpublic 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,
@Testpublic 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
保存了记录的插入顺序,也是按顺序排列的,
@Testpublic 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
采用的是红黑树算法的实现。按自然排序的升序进行排序。
@Testpublic 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 查询出来的数据是按顺序排列输出
0 0
- 简单谈hashmap hashtable linkedhashmap treemap的区别
- JAVA HashMap,LinkedHashMap,TreeMap,HashTable 的区别
- HashMap、TreeMap、LinkedHashMap、hashtable的区别
- HashMap,LinkedHashMap,TreeMap,HashTable的区别
- HashMap Hashtable LinkedHashMap TreeMap的区别
- HashMap / Hashtable / LinkedHashMap / TreeMap的区别
- HashMap、TreeMap、LinkedHashMap、hashtable的区别
- HashMap,HashTable,LinkedHashMap,TreeMap的区别
- HashMap,LinkedHashMap,TreeMap,HashTable的区别
- HashMap、HashTable、LinkedHashMap和TreeMap的区别
- HashMap,LinkedHashMap,TreeMap,HashTable的区别
- HashMap、Hashtable、LinkedHashMap 和TreeMap的区别
- LinkedHashMap,HashMap,TreeMap,HashTable的区别
- HashMap、LinkedHashMap、TreeMap、HashTable的区别
- HashTable,HashMap,LinkedHashMap,TreeMap之间的区别。
- HashMap,LinkedHashMap,TreeMap,HashTable的区别
- HashMap,LinkedHashMap,HashTable,TreeMap 区别
- hashMap hashTable TreeMap linkedHashMap区别
- cell重用出错
- 集合详解之HashMap
- java设计模式-模板方法模式
- java SSLSocket的详解
- [数据结构与算法] 3,线性表
- 简单谈hashmap hashtable linkedhashmap treemap的区别
- spring 异步处理
- 我眼中的java线程池实现原理
- php审计基础二:命令执行
- PATA-1008Elevator (20)
- c++primer笔记--2.1基本内置类型
- OpenCV 各种滤波器的简单使用
- POJ 1077 Eight(bfs八数码问题)
- 大数据IMF传奇行动绝密课程第45课:Spark性能优化第一季