Tag: hashmap

如何比较Java中的两个哈希映射

嗨,我正在使用Java中的HashMap,我有一个场景,我必须比较2个HashMaps HashMap1: Key: BOF Value: SAPF Key: BOM Value: SAPM Key: BOL Value: SAPL HashMap2: Key: BOF Value: Data1 Key: BOL Value: Data2 在比较这两个哈希映射之后,我得到的hashmap将包含Key作为First HashMap1的值,Value作为第二个HashMap2的值。 HashMap3: Key: SAPF Value: Data1 Key: SAPL Value: Data2

HashMap Java示例避免冲突

我在java中使用HashMap来存储键和Object 。 我读到了关于hashmap的冲突,我试图通过使用链表来避免它。 我在网上做了一些搜索,但是我找不到一个如何做到这一点的例子。 有人可以指向我使用链表实现hashmap的在线资源吗?

在Java中使用多级HashMap的最佳实践

我们有一种情况,我们最终使用多级哈希映射; 也就是说,哈希映射内部的哈希映射,深度为三层或四层。 本能地,这在某个地方感觉不对。 我在这里阅读了有关如何迭代/使用多级哈希映射的post,但几乎没有人说这是什么最好的做法。 为什么多级哈希映射不好,如果有的话,更好的设计是什么? 以下是我们拥有的多级哈希映射的示例设计: Map map1; class Object1 { String version; Map map2; } class Object2 { Map<String,List> map4; Map map5; }

HashMap优化的影响,它将与每个条目关联的哈希代码缓存到其get方法中

来自第46页“有效的Java”Joshua Bloch。 第9项:当你重写equals时,ALways会覆盖hashCode 某些类PhoneNumber会覆盖equals()并且不会覆盖hashCode() “涉及两个实例:一个用于插入HashMap,另一个用于(尝试)检索。” …“…即使两个实例碰巧哈希到同一个桶, get方法几乎肯定会返回null ,因为HashMap有一个优化缓存与每个条目关联的哈希代码,并且不需要检查如果哈希码不匹配,则对象相等。“ 问题是 – 如果“两个实例碰巧哈希到同一个桶”,为什么’get’将返回’null’? 什么是HashMap优化的角色(没有得到正确的实例)“兑现…”? 只是针对这种情况 – “这两个实例碰巧哈希到同一个桶” – 如果HashMap困扰“如果哈希码不匹配则对象相等”会怎么样?

带有ArrayList通配符的Java HashMap

我有一个HashMap,其值是ArrayLists,我正在尝试编写一个函数来接受这些HashMaps的generics实例 HashMap<String, ArrayList> myMap = new HashMap<String, ArrayList>(); public static void foo(HashMap<?, ArrayList> a) {} public static void bar(HashMap<?, ? extends ArrayList> a) {} // Compilation Failure! foo(myMap); // This works, but why do I need ? extends ArrayList bar(myMap) 错误消息是 类型为Example的方法foo(HashMap<?,ArrayList>)不适用于参数( HashMap<String,ArrayList> )。 为什么我需要为extends ArrayList使用通配符? 我认为通过使用ArrayList (没有? extends ),我可以将函数限制为仅具有ArrayList值的HashMaps。 我也知道以下通用方法有效: public static void printer(HashMap<K, […]

hashmap的第n项

HashMap selections = new HashMap(); 如何在所有HashMap中获取Float的第3个较小值的Integer键? 为此使用HashMap 编辑即时消息 for (InflatedRunner runner : prices.getRunners()) { for (InflatedMarketPrices.InflatedPrice price : runner.getLayPrices()) { if (price.getDepth() == 1) { selections.put(new Integer(runner.getSelectionId()), new Float(price.getPrice())); } } } 我需要第3个较小价格的跑步者,深度为1 也许我应该以另一种方式实现这个?

使用Java,如何在不重复比较的情况下将HashMap中的每个条目与同一HashMap中的每个其他条目进行比较?

我目前正在使用2 for循环来比较所有条目,但我得到重复的比较。 由于HashMaps没有订购,我无法弄清楚如何消除已经进行的比较。 例如,我有类似的东西: for(Entry e1: map.entrySet()) { for(Entry e2: map.entrySet()) { if (e1.getKey() != e2.getKey()) { //compare e1.getValue() to e2.getValue() } } } 这个问题是第一个条目将与第二个条目进行比较,然后与第三个条目进行比较,依此类推。 但是第二个条目将再次与第一个条目进行比较,依此类推。 然后将第三个条目与第一个条目进行比较,然后是第二个条目,然后是第四个条目,等等。是否有更好的方法来迭代HashMaps以避免进行重复比较? 附加信息: 为了更具体,希望能回答你的问题,我所拥有的HashMap是存储文件名(密钥)和文件内容(值) – 只是文本文件。 通过遍历包含我想要比较的文件的目录来填充HashMap。 然后,我正在做的是通过一些算法运行成对的文件,以确定每对文件之间的相似性。 我不需要将文件1与文件2进行比较,然后再将文件2与文件1进行比较,因为我只需要比较2个文件一次。 但我确实需要将每个文件与其他文件进行一次比较。 我是使用HashMaps的新手。 agim在下面的回答可能只适用于我的目的。 但我也会尝试围绕着下面的Evgeniy Dorofeev和Peter Lawrey的解决方案。 我希望这有助于更好地解释事情。

具有零键function的线程安全映射

我需要一个multithreadingMap对象在我的Web服务器的缓存中使用,我需要null键。 HashMap允许我使用null键,但ConcurrentHashMap不允许。 我尝试使用Collections.synchronizedMap(new HashMap())创建HashMap的同步版本,但它也不接受null键。 有没有我可以使用的替代品,而不必实现某种方式来包装null键?

哈希映射内存开销

我正在研究哈希地图的内部结构,我遇到了以下细节: 实现是一个HashMap $ Entry对象的数组: 每个HashMap $ Entry包含: – int KeyHash – Object next – Object key – Object Value 默认容量为16个条目 空大小为128个字节 HashMap的开销是48个字节,对于数组加上(16 +(条目* 4个字节)) – HashMap $ Entry对象的开销 每个键的额外32字节↔值输入HashMap的开销是 因此: – 48个字节,每个条目加36个字节 任何人都可以解释我“HashMap的开销是48字节,加上(16 +(条目* 4字节))数组”和“每个键的额外32字节↔值条目HashMap的开销是 因此: – 48个字节,每个条目加36个字节“ ??? 我无法理解这些结论是如何产生的,即我们如何遇到关于哈希映射的最终内存细节。

使用HashMap计算实例

我有以下代码来计算数组中不同字符串的实例; String words[] = {“the”,”cat”,”in”,”the”,”hat”}; HashMap wordCounts = new HashMap(50,10); for(String w : words) { Integer i = wordCounts.get(w); if(i == null) wordCounts.put(w, 1); else wordCounts.put(w, i + 1); } 这是一种正确的做法吗? 一个简单的任务似乎有点啰嗦。 HashMap结果对我很有用,因为我将通过字符串对其进行索引。 我很担心这条线 else wordCounts.put(w, i + 1); 由于这个事实,可能会插入第二个key-value对 new Integer(i).equals(new Integer(i + 1)); 将是假的,所以两个Integers最终将在同一个String密钥桶下,对吧? 或者我只是过度思考自己陷入困境?