首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java hashtable还是hashmap?

问Java hashtable还是hashmap?
EN

Stack Overflow用户
提问于 2014-01-13 18:14:50
回答 6查看 1.8K关注 0票数 3

我一直在研究寻找更快的替代列表的方法。在一本算法书中,hashtable似乎是使用单独链接最快的。然后,我发现java有一个hashtable的实现,据我所读,它似乎使用了单独的链接。但是,同步的开销很大,因此建议将hashmap的实现作为hashtable的一个更快的替代方案。

我的观点是:

  • java hashmap是用java实现插入/删除/搜索的最快的数据结构吗?
  • 在阅读时,有几篇文章担心hashmap的内存使用情况。有一篇文章提到一个空的hashmap占用300个字节。hashtable比hasmap更有效吗?
  • 另外,hash函数在strings中是最有效的吗?
EN

回答 6

Stack Overflow用户

发布于 2014-01-13 19:11:39

有太多的上下文缺失,无法回答这个问题,我认为,你应该使用最简单的选择,而不是担心性能,直到你已经衡量了你有问题。

java hashmap是用java实现插入/删除/搜索的最快的数据结构吗?

ArrayList比HashMap要快得多,这取决于您需要它做什么。我见过人们使用地图时,他们应该使用对象。在这种情况下,自定义类实例可以更快、更小。

在阅读时,有几篇文章担心hashmap的内存使用情况。有一篇文章提到一个空的hashmap占用300个字节。

除非你知道300个字节(这比你眨眼的最低工资要低)重要,否则我会认为它不重要。

哈希表比hasmap更有效吗?

它可能是,但还不够重要。默认情况下,Hashtable以较小的大小开始。如果你制造一个容量较小的HashMap,它就会更小。

另外,每个字符串中的散列函数是否对字符串最有效?

在一般情况下,它是足够有效的。在罕见的情况下,您可能想要改变策略,如防止拒绝服务攻击。如果您真的关心内存效率和性能,也许您不应该首先使用字符串。

票数 1
EN

Stack Overflow用户

发布于 2014-01-13 18:17:15

从您的角度来看,HashMap (或者更可能是HashSet)可能是一个很好的起点。它并不完美,它确实比列表占用更多的内存,但是当您需要快速添加、删除和包含操作时,它应该是默认的。String.hashCode()实现不是最好的哈希函数,尽管它速度快,而且对大多数用途来说都足够好。

票数 0
EN

Stack Overflow用户

发布于 2014-01-13 18:18:51

正如您已经指出的,Hashtable是完全同步的,因此它取决于您的环境。如果您有许多线程,那么ConcurrentHashMap将是更好的解决方案。但是,您可以查看Trove4J --也许它会更好地满足您的需求。特洛伊使用类似于hashtable的链接散列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21098413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档