首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

HashMapHashTable区别

概要 - HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口 - 主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于HashTable...- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许 - 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是 hashMap...2 一般我们声明HashMap时,使用的都是默认的构造方法:HashMap,看了代码你会发现,它还有其它的构造方法:HashMap(int initialCapacity, float loadFactor...的容量为16,加载因子为0.75,那么阀值就是12,所以在往HashMap中put的值到达12时,它将自动扩容两倍,如果两个线程同时遇到HashMap的大小达到12的倍数时,就很有可能会出现在将oldTable...转移到newTable的过程中遇到问题,从而导致最终的HashMap的值存储异常。

8610

HashTable 和HashMap区别

HashTable 和HashMap区别 HashTable最早的版本是JDK1.1 ,HashMap最早版本是1.2 HashTable继承的是Dictionary抽象类 , HashMap继承的是...AbstractMap HashTable是线程安全的,HashMap 是线程不安全 HashTable key value 都不能为Null,HashMap key value可以为Null HashTable...散列算法是取余,HashMap 是按位与(取模算法) HashTable初始化默认大小是11,HashMap初始化默认大小是16 这里还需要考虑为什么取余算法 默认就是11,每次扩容都是*2, 应该和...HashMap扩容有关 HashTable 内部迭代实现用的是枚举迭代(Enmeration,第一代迭代器),HashMap内部迭代实现用的迭代器(Iterator) HashTable 内部Node...是链表结构,HashMap 1.8新特性 内部Node对象链表长度超过8后,会变更为红黑树,树节点小于6的时候,会转换成链表

22810

HashTable vs HashMap(三)

HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。...1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。...HashtableHashMap的区别: 1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类; 2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的...Hashtable不允许 还有就是,HashMapHashtable的contains方法去掉了,改成containsvalue和containsKey。...最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在 多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

29030

HashMap&ConcurrentHashMap&HashTable

hashmaphashtable 是否线程安全? HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过 synchronized 修饰。...,因为效率的问题HashMap的效率要高于HashTable的效率。HashTable基本已经不用。...②创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小(HashMap 中的tableSizeFor()方法,HashMap 总是使用...Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 数组+链表 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的; 实现线程安全的方式...HashTable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的 TreeMap: 红黑树(自平衡的排序二叉树)

37500

HashtableHashMap、TreeMap 分析

HashtableHashMap、TreeMap 区别 HashtableHashMap、TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型。...Hashtable Hashtable 是早期 Java 类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由 于同步导致的性能开销,所以已经很少被推荐使用。...初始化与增长方式 初始化时:HashTable在不指定容量的情况下的默认容量为11,且不要求底层数组的容量一 定要为2的整数次幂;HashMap默认容量为16,且要求容量一定为2的整数次幂。...扩容时:Hashtable将容量变为原来的2倍加1;HashMap扩容将容量变为原来的2倍。...** HashMap HashMap 是应用更加广泛的哈希表实现,行为上大致上与 HashTable 一致,主要区别在于 HashMap 不是同步的,支持 null 键和值等。

69340

HashMapHashTable区别

相同点: HashMapHashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口不同点:一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java...1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的, Hashtable的方法是Synchronize的,也就是说是同步的,    而HashMap是线程序不安全的,不是同步的...,如果想要同步,则使用 ConcurrentHashMap  HashMap在只有一个线程访问的情况下,效率要高于Hashtable                如果是多线程     HashTable...效率比HashTable高很多三.Value值:只有HashMap可以让你将空值作为一个表的条目的key或value。...Hashtable、ConcurrentHashMap都不支持KV为NULL注意:HashMap的key/value均可以为null,但是TreeMap的key不能为空,value可以为空其他Map:(

13110

HashTableHashMap 区别

Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。...0x05: 两个遍历方式的内部实现上不同 HashtableHashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。...Hashtable计算hash值,直接用key的hashCode(),而HashMap重新计算了key的hash值,Hashtable在求hash值对应的位置索引时,用取模运算,而HashMap在求位置索引时...0x07: 内部实现使用的数组初始化和扩容方式不同 HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂...Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。 HashtableHashMap它们两个内部实现方式的数组的初始大小和扩容的方式。

53020

hashmaphashtable和hashset的区别_Hashtable

HashMap加入了红黑树 Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。...添加key-value的hash值算法不同:HashMap添加元素时,是使用自定义的哈希算法,而HashTable是直接采用key的hashCode() 实现方式不同:Hashtable 继承的是 Dictionary...初始化容量不同:HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。...多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。...由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable

28910

HashMapHashtable的区别

作者:王兴 HashMapHashtable的区别 HashMapHashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。...虽然HashtableHashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。...继承的父类不同 HashMapHashtable不仅作者不同,而且连父类也是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。...而HashMap则总是使用2的幂作为哈希表的大小。 之所以会有这样的不同,是因为HashtableHashMap设计时的侧重点不同。Hashtable的侧重点是哈希的结果更加均匀,使得哈希冲突减少。...这从而导致了HashtableHashMap的计算hash值的方法不同 9.

48920

HashMapHashtable 的区别

HashMapHashtable 的区别 线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的,因为 HashTable 内部的方法基本都经过synchronized...; 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。...另外,HashTable 基本被淘汰,不要在代码中使用它; 对 Null key 和 Null value 的支持: HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个...初始容量大小和每次扩充容量大小的不同 : ① 创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。...② 创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小(HashMap 中的tableSizeFor()方法保证,下面给出了源代码

77730

HashTableHashMap的区别

HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化...初始size为11,扩容:newsize = oldsize*2+1 计算index的方法:index = (hash & 0x7FFFFFFF) % tab.length HashMap 底层数组...就会产生无效扩容) 当Map中元素总数超过Entry数组的75%,触发扩容操作,为了减少链表长度,元素分配更均匀 计算index方法:index = hash & (tab.length – 1) HashMap...加载因子:为了降低哈希冲突的概率,默认当HashMap中的键值对达到数组大小的75%时,即会触发扩容。因此,如果预估容量是100,即需要设定100/0.75=134的数组大小。...Hashtable的synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术 有些方法需要跨段

77800

HashMapHashtable的区别

HashMapHashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别: 一:历史原因: Hashtable是基于陈旧的Dictionary类的,HashMap...二:同步性 Hashtable 是同步的,该类的方法保证了,Hashtable中的对象是线程安全的,而HashMap则是异步的。...因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率。...所以如果不需要线程安全的集合,那么我们就要毫不犹豫的使用HashMap,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。...三:值 HashMap可以让你将空值null作为一个元素的key或者value 但是Hashtable是不可以放入空值null的。 最大的区别就是同步性上的差别。

28820

HashMapHashtable的区别

这篇文章中,我们不仅将会看到HashMapHashtable的区别,还将看到它们之间的相似之处。...HashMapHashtable的区别 HashMapHashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。...HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable...由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。...HashMap可以通过下面的语句进行同步: Map m = Collections.synchronizeMap(hashMap); 结论 HashtableHashMap有几个主要的不同:线程安全以及速度

52610
领券