Java哈希表或哈希表?
这个问题在这里已经有了答案:
HashMap
(或者更可能是HashSet
)可能是一个很好的开始的地方。 这并不完美,它比列表消耗更多的内存,但是当您需要快速添加,删除和包含操作时,它应该是您的默认值。 String.hashCode()
实现并不是最好的散列函数,尽管它很快,而且对于大多数目的来说足够好。
HashMap(&HashTable也是我认为的)的访问时间为O(1),因为Put()期间给定值的内部存储区布局是通过计算(值的密钥哈希)%(存储区总数)确定的。 这个O(1)是平均访问时间,但是如果许多键散列到同一个桶中,那么访问时间将趋向于O(n),因为所有值被放入同一个桶中,并且它们都以链表的方式增长。
正如你所说的考虑Hashtable内的同步开销,我可能会选择Hash地图。 除此之外,您还可以通过设置各种参数(如载入因子)来优化Hashmap,从而提供内存优化方式。 我投票HashMap ...
正如您所指出的,Hashtable完全同步,因此取决于您的环境。 如果你有很多线程,那么ConcurrentHashMap将是更好的解决方案。 但是你可以看看Trove4J - 也许它会更好地满足你的需求。 Trove使用类似哈希表的链接哈希
链接地址: http://www.djcxy.com/p/16351.html