关于HashTable,HashMap和TreeMap的几点心得
来源:互联网 发布:手机 视频剪辑 软件 编辑:程序博客网 时间:2024/04/28 14:55
java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类。Map是将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射一个一个值。
Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.
Hashtable 与 HashMap类似,但是主要有6点不同。
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。
3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration,HashMap使用Iterator。
5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6.哈希值的使用不同,HashTable直接使用对象的hashCode。
TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
下面是HashTable,HashMap和TreeMap总结的一个经典例子。
- package com.taobao.luxiaoting;
- import java.util.Map;
- import java.util.HashMap;
- import java.util.Set;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Hashtable;
- import java.util.TreeMap;
- class HashMaps
- {
- public static void main(String[] args)
- {
- Map map=new HashMap();
- map.put(“a”, “aaa”);
- map.put(“b”, “bbb”);
- map.put(“c”, “ccc”);
- map.put(“d”, “ddd”);
- Iterator iterator = map.keySet().iterator();
- while (iterator.hasNext()) {
- Object key = iterator.next();
- System.out.println(“map.get(key) is :”+map.get(key));
- }
- Hashtable tab=new Hashtable();
- tab.put(“a”, “aaa”);
- tab.put(“b”, “bbb”);
- tab.put(“c”, “ccc”);
- tab.put(“d”, “ddd”);
- Iterator iterator_1 = tab.keySet().iterator();
- while (iterator_1.hasNext()) {
- Object key = iterator_1.next();
- System.out.println(“tab.get(key) is :”+tab.get(key));
- }
- TreeMap tmp=new TreeMap();
- tmp.put(“a”, “aaa”);
- tmp.put(“b”, “bbb”);
- tmp.put(“c”, “ccc”);
- tmp.put(“d”, “ddd”);
- Iterator iterator_2 = tmp.keySet().iterator();
- while (iterator_2.hasNext()) {
- Object key = iterator_2.next();
- System.out.println(“tmp.get(key) is :”+tmp.get(key));
- }
- }
- }
输出结果如下图所示
这样就可以明显看出只有TreeMap得到的记录是排过序的。
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于HashTable,HashMap和TreeMap的几点心得
- 关于java和jar命令的几点心得
- 关于java和jar命令的几点心得
- 关于tomcat配置的几点心得
- 关于拼音索引的几点心得
- 关于html学习的几点心得
- 关于构造函数的几点心得
- 关于postman使用的几点心得
- 关于HashMap、HashTable、LinkHashMap、TreeMap的区别
- HashTable,HashMap和TreeMap
- hashMap、hashtable和treeMap的区别
- Hashtable、HashMap和TreeMap的区别
- 【WOW】字符编码
- org.xml.sax.SAXParseException: Premature end of file
- เล่น บาคาร่ารับสิทธิประโยชน์มากมาย
- 使用mciSendCommand实现录音
- 探索应用开发的基础之android工程目录结构
- 关于HashTable,HashMap和TreeMap的几点心得
- bmp data for OSD
- Android 代码混淆can’t find referenced class问题解决方案
- 请教高手 A a= new B();
- (一)选择题
- 最长公共子序列算法
- health monitor
- FKJAVA读书笔记--第六章--面向对象(下)
- Mybatis高级应用