标签: hashmap

对于不同的密钥,HashMap是否是线程安全的?

如果我有两个多线程访问HashMap,但保证他们永远不会同时访问同一个密钥,那还能导致竞争条件吗?

java multithreading hashmap thread-safety

80
推荐指数
4
解决办法
5万
查看次数

固定大小的HashMap的最佳容量和负载因子是多少?

我试图找出特定情况下的最佳容量和负载系数.我想我已经掌握了它的要点,但我还是要感谢那些比我更了解的人的确认.:)

如果我知道我的HashMap将填充包含100个对象,并且大部分时间都会花费100个对象,我猜测最佳值是初始容量100和加载因子1?或者我需要容量101,还是有其他问题?

编辑:好的,我留出几个小时做了一些测试.结果如下:

  • 奇怪的是,容量,容量+ 1,容量+2,容量-1和容量-10都可以产生完全相同的结果.我预计至少容量-1和容量10会产生更糟糕的结果.
  • 使用初始容量(而不是使用默认值16)可以显着提高put()的性能 - 提高30%.
  • 使用1的加载因子可为少量对象提供相同的性能,并为大量对象提供更好的性能(> 100000).但是,这并没有与物体数量成比例地改善; 我怀疑还有其他影响结果的因素.
  • get()性能对于不同数量的对象/容量有点不同,但是尽管它可能因情况而略有不同,但通常它不受初始容量或负载因子的影响.

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)

java hashmap

79
推荐指数
2
解决办法
2万
查看次数

如何将Java的hashMap内容全部放在另一个,但不能替换现有的键和值?

我需要将所有键和值从一个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)

java hashmap map

79
推荐指数
5
解决办法
16万
查看次数

超高性能C/C++哈希映射(表,字典)

我需要将原始键(int,可能很长)映射到高性能哈希映射数据结构中的struct值.

我的程序将有几百个这样的地图,每个地图通常最多只有几千个条目.但是,地图会不断地"刷新"或"翻腾"; 想象一下处理数百万adddelete消息.

C或C++中的哪些库具有适合此用例的数据结构?或者,您会如何建议自己建造?谢谢!

c c++ dictionary hashtable hashmap

77
推荐指数
5
解决办法
7万
查看次数

如何实现JavaScript哈希映射?

我目前正在使用OpenLayers,并且有大量数据可以绘制到矢量图层(大于100000个矢量).

我现在正试图将所有这些向量放入JavaScript哈希映射中以分析性能.我想知道JavaScript中的哈希映射是如何实现的,它是一个真正的哈希函数还是只是一个使用简单数据结构和搜索算法的包装函数?

javascript hash hashmap

77
推荐指数
5
解决办法
21万
查看次数

Android - 从HashMap获取价值

我试图在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 android hashmap android-widget

75
推荐指数
4
解决办法
17万
查看次数

基于键对hashmap进行排序

我在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}

感谢帮助!

java hashmap

75
推荐指数
5
解决办法
13万
查看次数

何时在LinkedList或ArrayList上使用HashMap,反之亦然

我们不能总是使用HashMap的原因是什么,即使它在添加,删除操作方面比ArrayList或LinkedList更有效,也与元素的数量无关.

我用Google搜索并发现了一些原因,但总是有一个使用HashMap的解决方法,优势仍然存在.

java arrays linked-list arraylist hashmap

73
推荐指数
2
解决办法
10万
查看次数

使用字节数组作为Map键

你看到使用字节数组作为Map键有什么问题吗?我也可以做new String(byte[])和哈希,String但它更直接使用byte[].

java bytearray hashmap

72
推荐指数
5
解决办法
6万
查看次数

"put"会覆盖现有值吗?

带有简单问题的哈希表新手.由于某种原因谷歌搜索没有给我一个直接的答案.说我有一个<int,String>哈希表设置:

myHashtable.put(1,"bird");
myHashtable.put(2,"iguana");
Run Code Online (Sandbox Code Playgroud)

我想把"鸟"变成"鱼"(并使指数保持不变).我可以做一个简单的put,还是我需要删除条目,或者什么?

java hashtable hashmap

71
推荐指数
2
解决办法
8万
查看次数