如果我有两个多线程访问HashMap,但保证他们永远不会同时访问同一个密钥,那还能导致竞争条件吗?
我试图找出特定情况下的最佳容量和负载系数.我想我已经掌握了它的要点,但我还是要感谢那些比我更了解的人的确认.:)
如果我知道我的HashMap将填充包含100个对象,并且大部分时间都会花费100个对象,我猜测最佳值是初始容量100和加载因子1?或者我需要容量101,还是有其他问题?
编辑:好的,我留出几个小时做了一些测试.结果如下:
EDIT2:我也添加了一些图表.这是说明加载因子0.75和1之间的差异的一个,在我初始化HashMap并将其填充到满容量的情况下.在y标度上是以ms为单位的时间(越低越好),x标度是大小(对象的数量).由于尺寸线性变化,所需时间也呈线性增长.
所以,让我们看看我得到了什么.以下两个图表显示了负载系数的差异.第一张图表显示了当HashMap填满容量时会发生什么; 由于调整大小,负载系数0.75表现更差.然而,它并不总是更糟糕,并且有各种各样的颠簸和跳跃 - 我想GC在这方面有重大影响.载荷系数1.25与1相同,因此它不包含在图表中.

该图表证明由于调整大小,0.75更差; 如果我们将HashMap填充到一半容量,0.75并不差,只是......不同(它应该使用更少的内存并且具有不可思议的更好的迭代性能).

还有一件事我想表现出来.这可以获得所有三个加载因子和不同HashMap大小的性能.除了加载因子1的一个峰值之外,一直保持不变.我真的想知道那是什么(可能是GC,但谁知道).

以下是感兴趣的人的代码:
import java.util.HashMap;
import java.util.Map;
public class HashMapTest {
// capacity - numbers high as 10000000 require -mx1536m -ms1536m JVM parameters
public static final int CAPACITY = 10000000;
public static final int ITERATIONS = 10000;
// set to false to print put performance, or to true to print get performance
boolean doIterations = false;
private Map<Integer, String> cache;
public void …Run Code Online (Sandbox Code Playgroud) 我需要将所有键和值从一个HashMap复制到另一个B,但不要替换现有的键和值.
什么是最好的方法呢?
我正在考虑迭代keySet和checkig是否存在,我愿意
Map temp = new HashMap(); // generic later
temp.putAll(Amap);
A.clear();
A.putAll(Bmap);
A.putAll(temp);
Run Code Online (Sandbox Code Playgroud) 我需要将原始键(int,可能很长)映射到高性能哈希映射数据结构中的struct值.
我的程序将有几百个这样的地图,每个地图通常最多只有几千个条目.但是,地图会不断地"刷新"或"翻腾"; 想象一下处理数百万add和delete消息.
C或C++中的哪些库具有适合此用例的数据结构?或者,您会如何建议自己建造?谢谢!
我目前正在使用OpenLayers,并且有大量数据可以绘制到矢量图层(大于100000个矢量).
我现在正试图将所有这些向量放入JavaScript哈希映射中以分析性能.我想知道JavaScript中的哈希映射是如何实现的,它是一个真正的哈希函数还是只是一个使用简单数据结构和搜索算法的包装函数?
我试图在Android上搜索HashMap,但遇到问题:
考虑这个例子:
HashMap<String, String> meMap=new HashMap<String, String>();
meMap.put("Color1","Red");
meMap.put("Color2","Blue");
meMap.put("Color3","Green");
meMap.put("Color4","White");
Run Code Online (Sandbox Code Playgroud)
现在我想迭代它并获得每种颜色的值,并希望在"Toast"中显示.我该如何显示它?
我在java中有以下hashmap:
{B046 = 0.0,A061 = 3.0,A071 = 0.0,B085 = 0.0,B075 = 3.0,B076 = 9.0,B086 = 3.0,B095 = 0.0,B096 = 0.0,A052 = 0.0,B066 = 0.0,B056 = 9.0,B065 = 0.0,B055 = 9.0}
我应该如何对hashmap进行排序,以便将Alphabet和数字数字考虑在内?
生成的hashmap应如下所示:
{A052 = 0.0,A061 = 3.0,A071 = 0.0,B046 = 0.0,B055 = 9.0,B056 = 9.0,B065 = 0.0,B066 = 0.0,B075 = 3.0,B076 = 9.0,B085 = 0.0,B086 = 3.0,B095 = 0.0,B096 = 0.0}
感谢帮助!
我们不能总是使用HashMap的原因是什么,即使它在添加,删除操作方面比ArrayList或LinkedList更有效,也与元素的数量无关.
我用Google搜索并发现了一些原因,但总是有一个使用HashMap的解决方法,优势仍然存在.
你看到使用字节数组作为Map键有什么问题吗?我也可以做new String(byte[])和哈希,String但它更直接使用byte[].
带有简单问题的哈希表新手.由于某种原因谷歌搜索没有给我一个直接的答案.说我有一个<int,String>哈希表设置:
myHashtable.put(1,"bird");
myHashtable.put(2,"iguana");
Run Code Online (Sandbox Code Playgroud)
我想把"鸟"变成"鱼"(并使指数保持不变).我可以做一个简单的put,还是我需要删除条目,或者什么?
hashmap ×10
java ×8
hashtable ×2
android ×1
arraylist ×1
arrays ×1
bytearray ×1
c ×1
c++ ×1
dictionary ×1
hash ×1
javascript ×1
linked-list ×1
map ×1