Tag: 哈希表

经常使用的元数据Hashmap

是否有任何静态大小哈希表的实现将条目限制为最近或最常用的元数据? 我不想自己跟踪这些信息。 我知道大多数缓存组件都会跟踪这一点,但我宁愿不介绍很多新的依赖项。

具有单独链接冲突解决方案的Java哈希表?

我使用内置的java.util.hashtable创建了一个程序,但现在我需要使用单独的链接来解决冲突。 是否可以使用哈希表的这种实现? 是否有一个已经实现使用单独链接?

哈希表。 姓名历史。 为什么不HashTable?

我们知道: ArrayList; LinkedList; TreeMap 和其他…以及CamelCase格式的所有名称,但为什么Hashtable ,而不是HashTable ? 这是无原则的问题,只是想知道:)

如果计算的哈希码超过INTEGER MAX LIMIT会发生什么?

这是来自Java HashTable Class的hashCode()实现。 如果哈希表中的元素数量很大且哈希码超过INTEGER MAX LIMIT -2,147,483,648到2,147,483,647会怎么样? 我假设hashCodes将是正整数。 public synchronized int hashCode() { int h = 0; if (count == 0 || loadFactor < 0) return h; // Returns zero loadFactor = -loadFactor; // Mark hashCode computation in progress Entry[] tab = table; for (int i = 0; i < tab.length; i++) for (Entry e […]

具有双向O(1)查找的数据结构。 哈希表?

我正在实施一个系统,我有一个名单列表,每个人都有1个电话号码。 我需要能够取一个名字并查找电话号码,或者拿一个电话号码并查找姓名。 我知道我可以通过两个哈希表来实现这一点 – 一个从名称到电话号码,一个从电话号码到名字。 然后我可以在O(1)时间向任意方向查找。 然而,这似乎是我存储了太多数据 – 每个名称和每个电话号码都存储了两次。 有没有办法更有效地做到这一点? 我应该使用什么数据结构来存储姓名和电话号码? 如果相关,我用Java编码。 非常感谢!

当您知道HashSet中最大可能的元素数时,应使用什么负载因子

当我真正知道HashSet中最大可能的元素数时,我应该使用什么负载因子? 我听说建议使用0.75的默认负载系数,因为它在速度和空间之间提供了良好的性能折衷。 它是否正确 ? 但是,更大的HashSet也会在创建和更多空间上花费更多时间。 我正在使用HashSet,以便从整数列表中删除重复的整数。

Java对象和数组内存位置

我正在用Java编写一个支持数组的哈希表,其中键和值的类型是Object; 没有其他保证。 代码方面对我来说最简单的方法是创建一个对象来保存它们: public class Pair { public Object key; public Object value; } 然后创建一个数组 public Pair[] storage = new Pair[8]; 但是jvm如何在内存中对待它? 也就是说,arrays实际上是: 是一个指向其他地方的Pair()对象的指针数组,或者 包含实际数据? 编辑 由于对象稍后被实例化为新的Pair(),因此它们被随机放置在堆中。 有没有什么好方法可以确保它们在堆中顺序? 我是否需要使用sun.misc.unsafe做一些诡计以使其工作? 解释我的动机,如果我想尝试确保顺序项在同一个内存页中,有没有办法在Java中做到这一点?

初始化HashMap的最佳方法

我通常会这样做 HashMap dictionary = new HashMap(); 我开始考虑它,据我所知, HashMap是通过哈希表实现的。 使用散列将对象存储在表中,以查找它们应存储在表中的位置。 我没有在dictionary构造上设置大小这一事实是否会降低性能? 即建设期间哈希表的大小是多少? 当元素增加时,是否需要为表分配新内存? 或者我对这里的概念感到困惑? 默认容量和负载是否足够,或者我应该花时间查看实际数字?

Hashtable的超时机制

我有一个哈希表,在流量很大的情况下。 我想为哈希表添加超时机制,删除太旧的记录。 我担心的是, – 它应该是轻量级的 – 删除操作没有时间关键。 我的意思是(超时值是1小时)删除操作可以在1小时或1小时15分钟后。 没有问题。 我的意见是,我创建了一个大数组(作为环形缓冲区),存储时间和哈希表键,当添加到哈希表时,使用数组索引查找数组上的下一个插槽时间,如果数组插槽为空,则插入时间和HT键,如果数组槽不为空,则比较发生超时的插入时间。 如果超时发生从Hashtable中删除(如果尚未删除)则不会发生超时,增加索引直到找到空槽或时间数组槽。 从哈希表中删除时,大数组上没有操作。 不久,对于Hashtable的每个添加操作,可以从哈希表中删除1个timeouted元素或不执行任何操作。 您的优雅和轻量级解决方案是什么? 谢谢你的帮助,

如何轻松地将两个hashMap 相加?

我有两个HashMap 我怎样才能轻松总结它们? 意味着对于字符串“a”,键将是(Map1的值+ Map2的值)的总和? 我可以迭代Map2的每个项目并手动添加到Map1。 但是想到可能有一种更简单的方法? 我更喜欢将整数汇总到其中一张地图中。 没有创建一个新的