我一直在研究寻找更快的替代列表的方法。在一本算法书中,hashtable似乎是使用单独链接最快的。然后,我发现java有一个hashtable的实现,据我所读,它似乎使用了单独的链接。但是,同步的开销很大,因此建议将hashmap的实现作为hashtable的一个更快的替代方案。
我的观点是:
hashmap是用java实现插入/删除/搜索的最快的数据结构吗?hashmap的内存使用情况。有一篇文章提到一个空的hashmap占用300个字节。hashtable比hasmap更有效吗?hash函数在strings中是最有效的吗?发布于 2014-01-13 19:11:39
有太多的上下文缺失,无法回答这个问题,我认为,你应该使用最简单的选择,而不是担心性能,直到你已经衡量了你有问题。
java hashmap是用java实现插入/删除/搜索的最快的数据结构吗?
ArrayList比HashMap要快得多,这取决于您需要它做什么。我见过人们使用地图时,他们应该使用对象。在这种情况下,自定义类实例可以更快、更小。
在阅读时,有几篇文章担心hashmap的内存使用情况。有一篇文章提到一个空的hashmap占用300个字节。
除非你知道300个字节(这比你眨眼的最低工资要低)重要,否则我会认为它不重要。
哈希表比hasmap更有效吗?
它可能是,但还不够重要。默认情况下,Hashtable以较小的大小开始。如果你制造一个容量较小的HashMap,它就会更小。
另外,每个字符串中的散列函数是否对字符串最有效?
在一般情况下,它是足够有效的。在罕见的情况下,您可能想要改变策略,如防止拒绝服务攻击。如果您真的关心内存效率和性能,也许您不应该首先使用字符串。
发布于 2014-01-13 18:17:15
从您的角度来看,HashMap (或者更可能是HashSet)可能是一个很好的起点。它并不完美,它确实比列表占用更多的内存,但是当您需要快速添加、删除和包含操作时,它应该是默认的。String.hashCode()实现不是最好的哈希函数,尽管它速度快,而且对大多数用途来说都足够好。
发布于 2014-01-13 18:18:51
正如您已经指出的,Hashtable是完全同步的,因此它取决于您的环境。如果您有许多线程,那么ConcurrentHashMap将是更好的解决方案。但是,您可以查看Trove4J --也许它会更好地满足您的需求。特洛伊使用类似于hashtable的链接散列。
https://stackoverflow.com/questions/21098413
复制相似问题