FAQ8.15 HashMap和Hashtable有什么区别?
2015-02-03 16:25
344 查看
Hashtable是Dictionary的子类并实现了Map接口;而HashMap是Map接口的一个实现类。除了不同步和允许使用null之外,HashMap类与Hashtable大致相同。在HashMap中,null可以作为键,但是这样的键只允许有一个,而作为键值允许存在一个或者多个null值。当调用get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该使用containsKey()方法来判断。Hashtable中的方法是同步的,而HashMap中方法在默认情况下是非同步的。
发现遍历List<T>的速度比遍历Dictionary<Guid,int>快得不少.为什么会这样呢,不是很明白?5. 问题剖析 同样是集合,为什么性能会有这样的差距。我们要从存储结构和操作系统的原理谈起。 首先我们清楚List<T>是对数组做了一层包装,我们在数据结构上称之为线性表,而线性表的概念是,在内存中的连续区域,除了首节点和尾节点外,每个节点都有着其唯一的前驱结点和后续节点。我们在这里关注的是连续这个概念。而HashTable或者Dictionary,他是根据Key而根据Hash算法分析产生的内存地址,因此在宏观上是不连续的,虽然微软对其算法也进行了很大的优化。由于这样的不连续,在遍历时,Dictionary必然会产生大量的内存换页操作,而List只需要进行最少的内存换页即可,这就是List和Dictionary在遍历时效率差异的根本原因。 6. 再谈Dictionary 也许很多人说,既然Dictionary如此强大,那么我们为什么不用Dictionary来代替一切集合呢? 在这里我们除了刚才的遍历问题,还要提到Dictionary的存储空间问题,在Dictionary中,除了要存储我们实际需要的Value外,还需要一个辅助变量Key,这就造成了内存空间的双重浪费。而且在尾部插入时,List只需要在其原有的地址基础上向后延续存储即可,而Dictionary却需要经过复杂的Hash计算,这也是性能损耗的地方。
java.util类 Dictionary<K,V>
java.lang.Object java.util.Dictionary<K,V>直接已知子类: Hashtable
public abstract class Dictionary<K,V>extends Object
Dictionary类是任何可将键映射到相应值的类(如
Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个Dictionary 对象中,每个键至多与一个值相关联。给定一个 Dictionary 和一个键,就可以查找所关联的元素。任何非
null对象都可以用作键或值。通常,应该在此类的实现中使用
equals方法,以决定两个键是否相同。注:此类已过时。新的实现应该实现 Map 接口,而不是扩展此类。从以下版本开始: JDK1.0 另请参见:
Map,
Object.equals(java.lang.Object),
Object.hashCode(),
Hashtable
构造方法摘要 |
---|
Dictionary()单独的构造方法。 |
方法摘要 | |
---|---|
elements()返回此 dictionary 中值的枚举。 | |
get(Object key)返回此 dictionary 中该键所映射到的值。 | |
isEmpty()测试此 dictionary 是否不存在从键到值的映射。 | |
keys()返回此 dictionary 中的键的枚举。 | |
put(K key,V value)将指定 key映射到此 dictionary 中指定 value。 | |
remove(Object key)从此 dictionary 中移除 key(及其相应的 value)。 | |
size()返回此 dictionary 中条目(不同键)的数量。 |
相关文章推荐
- HashMap和Hashtable有什么区别?
- Hashtable和HashMap有什么区别
- java里的Hashtable和HashMap有什么区别
- Hashtable和HashMap有什么区别
- Map中HashMap和Hashtable主要有什么区别。
- 什么是HashTable?HashMap和HashTable的区别
- Hashtable和HashMap有什么区别
- HashMap 和 Hashtable 有什么区别?
- Hashtable和HashMap的区别
- HashTable和HashMap的区别
- HashTable和HashMap的区别
- Hashtable和HashMap类的区别
- Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
- HashTable和HashMap的区别
- HashTable和HashMap的区别
- Java中的HashTable和HashMap的区别
- Vector和ArrayList,Hashtable和HashMap,ArrayList和LinkedList的区别
- hashtable和hashmap的区别
- HashMap和Hashtable的区别
- HashTable和HashMap的区别