Java中HashMap和Hashtable之间的区别是什么?
对于非线程应用程序,哪个更有效?
Java中HashMap和Hashtable之间的区别是什么?
对于非线程应用程序,哪个更有效?
当前回答
除了izb所说的,HashMap允许空值,而Hashtable不允许。
还要注意,Hashtable扩展了Dictionary类,作为Javadocs状态,该类已过时,已被Map接口取代。
其他回答
HashMap和Hashtable也有显著的算法差异。以前没有人提到过这一点,所以我才提出来。HashMap将构造一个大小为两倍的哈希表,动态地增加它,以便在任何bucket中最多有八个元素(冲突),并且对于一般的元素类型,可以很好地搅拌这些元素。然而,如果你知道你在做什么,Hashtable实现提供了对哈希的更好和更精细的控制,也就是说,你可以使用最接近你的值域大小的素数来固定表大小,这将导致比HashMap更好的性能,即在某些情况下更少的冲突。
除了在这个问题中广泛讨论的明显差异之外,我认为Hashtable是一款“手动驾驶”汽车,您可以更好地控制哈希,而HashMap是“自动驾驶”的对应车型,通常表现良好。
HashMap:使用哈希代码对数组进行索引的Map接口的实现。哈希表:嗨,1998年来电话。他们想拿回他们的集合API。
说真的,你最好完全远离Hashtable。对于单线程应用程序,您不需要额外的同步开销。对于高度并发的应用程序,偏执的同步可能会导致饥饿、死锁或不必要的垃圾收集暂停。正如Tim Howland所指出的,您可以使用ConcurrentHashMap。
HashMap和HashTable
关于HashMap和HashTable的一些要点。请阅读以下详细信息。
1) Hashtable和Hashmap实现java.util.Map接口2) Hashmap和Hashtable都是基于哈希的集合。并致力于哈希。所以这些是HashMap和HashTable的相似性。
HashMap和HashTable之间的区别是什么?
1) 第一个区别是HashMap不是线程安全的,而HashTable是ThreadSafe的2) HashMap性能更好,因为它不是线程安全的。而Hashtable的性能并不是更好,因为它是线程安全的。因此多个线程不能同时访问Hashtable。
HashMap是模拟的,因此可以在GWT客户端代码中使用,而Hashtable不是。
请记住,HashTable是在引入Java集合框架(JCF)之前的遗留类,后来经过了修改以实现Map接口。Vector和Stack也是如此。
因此,在新代码中始终远离它们,因为正如其他人所指出的,JCF中总是有更好的替代方案。
这是Java集合备忘单,您会发现它很有用。请注意,灰色块包含旧类HashTable、Vector和Stack。