hashtable和hashmap有什么区别,共同之处?、
发布网友
发布时间:2022-03-29 14:53
我来回答
共3个回答
热心网友
时间:2022-03-29 16:22
Hashtable和HashMap有什么区别
1.Hashtable和HashMap有什么区别?
a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自AbstractMap类同时是Java 1.2引进的Map接口的一个实现。
b.也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,然你可以不用采取任何特殊的行为就可以在一个 多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
c.第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
d.HashMap去掉了Hashtable的contains方法,保留了containsValue和containsKey方法
e.Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以),HashMap允许null值(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,代码是这样的:int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;而HashMap重新计算hash值,而且用与代替求模:int hash = hash(k);
int i = indexFor(hash, table.length);static int hash(Object x) {
int h = x.hashCode();
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}
static int indexFor(int h, int length) {
return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如HashMap对null的操作。
Hashtable和HashMap的区别:
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现HashMap允许将null作为一个entry的key或者value,而Hashtable不允许还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap
就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。来自:求助得到的回答
热心网友
时间:2022-03-29 17:40
a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自AbstractMap类同时是Java 1.2引进的Map接口的一个实现。
b.也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,然你可以不用采取任何特殊的行为就可以在一个 多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap
C.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
D.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
E.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
热心网友
时间:2022-03-29 19:15
该题可以在 ,有很多解答.我这需要说明下 这个是面试常 问的但hashtable 基本被淘汰了 ,可用concurrentMap 替代
java中,HashMap和Hashtable有什么区别?
HashMap允许键和值是null,而Hashtable不允许键或者值是null。Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。一般认为Hashtable是...
HashMap和Hashtable的区别是啥呢?
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因...
hashtable和hashmap区别
Hashtable和HashMap的区别 一、数据存储方式的差异 HashMap采用了键值对的存储方式,以哈希表结构进行数据存储。其基于哈希表的数组实现方式允许其在理想情况下实现O的查询效率。而Hashtable同样采用键值对存储方式,但其实现方式相对复杂,除了哈希表结构外还涉及链表等其他数据结构。二、线程安全性的差异 Ha...
Map接口,HashMap和HashTable的相同点和不同点分别是什么?
Hashtable和HashMap的区别:1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题...
hashmap和hashtable的区别
HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。另一个区别是HashMap的迭代器(Iterator)是fail-...
hashmap和hashtable的区别
hashmap和hashtable的区别:一、hash数组默认大小不同 1、HashMap:HashMap中 hash数组的默认大小是16,而且一定是2的指数。2、Hashtable:HashTable中hash数组默认大小是11,增加的方式是 old*2+1。二、线程安全不同 HashMap不是线程安全的,HashTable是线程安全。HashMap允许空(null)键值(key),...
HashMap和Hashtable的区别是什么?
HashMap和Hashtable是Java中两种常见的Map接口实现,它们在功能和使用场景上有所差异。HashMap是Hashtable的轻量级非线程安全版本,当单线程环境下,其效率相对更高。一个显著的区别在于,HashMap允许键值对中的键或值为null,而Hashtable则严格禁止。在方法设计上,HashMap去掉了contains方法,改为了contains...
Java中HashMap和Hashtable及HashSet的区别
hastTable和hashMap的区别:(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。(2)这个不同即是最重要的一点:Hashtable中的方法是同步的,而HashMap方法(在缺省情况下)是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于...
hashtable和hashmap的区别是什么?
一、继承父类不同 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类;但二者都实现了Map接口。二、线程的安全性 1、HashTable是同步(方法中使用了Synchronize)的;而HashMap是未同步(方法中缺省Synchronize)的。2、Hashtable线程安全,因为它每个方法中都加入了Synchronize,在多线程并发的环境下...
HashMap和Hashtable的区别?
HashMap和Hashtable都是Java中实现Map接口的数据结构,但它们在设计和使用上存在显著区别。首先,HashMap是非线程安全的,相较于Hashtable,它在效率上可能稍有优势,允许空键值对的插入,提供了灵活性。然而,Hashtable不允许null键值,且其contains方法被替换为containsValue和containsKey,以减少可能的误解。