HashTable和HashMap比较
2018-01-25 17:09
232 查看
HashTable源码
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable{}
HashTable源码定义
这个类实现了一个哈希表,它将键映射到值。任何非空对象都可以用作键或值。
HashMap源码
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
HashMap源码定义
基于哈希表的映射接口实现。该实现提供了所有可选的映射操作,并允许null值和null键。(HashMap类大致相当于Hashtable,除了它是不同步的,并且允许null)
注:java中两种数据存储方式:
数组 | 查询速度快,增删较慢 | 原因:连续空间,按下标可实现快速查询,但每次增删,数组的全体下标会重新排列 |
---|---|---|
链表 | 查询速度慢、增删快 | 原因:不连续空间,链式结构,增删元素只需修改指针,查询则需遍历。 |
HashMap和HashTable比较
内容 | HashMap | HashTable |
---|---|---|
存储机制 | 哈希表(数组+链表) | 哈希表(数组+链表) |
线程 | 线程不安全 | 线程安全(内部的大多数方法有synchronized 修饰) |
性能 | 优秀 | 已淘汰 |
是否为null | 允许为null值,源码中会将null值会调用putForNullKey(value)方法,将[null,value]放在table[0]的位置 | 不允许为null,否则抛出 NullPointerException 异常 |
默认初始数组 | 16(扩容时乘2,使用位运算取得哈希,效率高于取模) | 11(乘2加1,都是素数和奇数,取模哈希结果更均匀) |
//HashMap的散列函数,这里传入参数为键值对的key static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } //返回hash值的索引,h & (length-1)操作等价于 hash % length操作, 但&操作性能更优 static int indexFor(int h, int length) { // length must be a non-zero power of 2 return h & (length-1); } //HashTable的散列函数直接在put方法里实现了 int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length;
相关文章推荐
- Java:Map与HashMap,Hashtable,HashSet比较
- HashTable,HashMap和HashSet比较
- HashMap和Hashtable的同和不同(详细比较)
- HashTable和HashMap的比较
- HashMap,HashTable,HashSet,ConcurrentHashMap的分析比较
- Hashtable与hashmap 比较
- stl: map和hashmap比较 hashmap与hashtable
- Hashtable 和 HashMap 的比较
- 集合源码学习(十):HashTable(Java8)与HashMap比较
- 比较Hashtable类和HashMap类的不同之处
- HashTable、HashMap、LinkedHashMap、TreeMap的比较
- HashMap,Hashtable以及ConcurrentHashMap的比较(源码)
- HashMap内部存储实现及HashTable比较
- Hashtable 与 HashMap 的简单比较
- 比较分析Vector、ArrayList和hashtable hashmap数据结构
- 比较分析Vector、ArrayList和hashtable hashmap数据结构
- Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较
- 比较分析Vector、ArrayList和hashtable hashmap数据结构
- HashMap底层实现原理,以及和Hashtable的比较
- HashMap 、LinkedHashMap、HashTable、TreeMap的比较