如果我有值"foo" ,并且ftw.containsValue("foo")返回true的HashMap<String> ftw ,我怎么能得到相应的键? 我必须通过哈希映射循环? 什么是最好的方法来做到这一点?
要添加一个新的哈希对我做: {:a => 1, :b => 2}.merge!({:c => 3}) # => {:a=>1, :b=>2, :c=>3} 有没有类似的方式来从哈希删除密钥? 这工作: {:a => 1, :b => 2}.reject!{ |k| k == :a } # => {:b=>2} 但我希望有这样的东西: {:a => 1, :b => 2}.delete!(:a) # => {:b=>2} 重要的是返回值将是剩余的散列,所以我可以做这样的事情: foo(my_hash.reject!{ |k| k == my_key } 在一行中。
快速的问题…散列图是STL的一部分吗?
我想知道Java如何在Map ( HashMap或Hashtable )中添加项目时进行订购。 密钥是由哈希码,内存引用还是按分配优先顺序sorting的? 这是因为我注意到在Map中相同的对不总是在相同的顺序
所以,如果我在迭代的时候尝试从Java HashSet中移除元素,我得到一个ConcurrentModificationExceptionexception 。 如下例所示,从HashSet中删除一部分元素的最佳方法是什么? Set<Integer> set = new HashSet<Integer>(); for(int i = 0; i < 10; i++) set.add(i); // Throws ConcurrentModificationException for(Integer element : set) if(element % 2 == 0) set.remove(element); 这是一个解决scheme,但我不认为它是非常优雅的: Set<Integer> set = new HashSet<Integer>(); Collection<Integer> removeCandidates = new LinkedList<Integer>(); for(int i = 0; i < 10; i++) set.add(i); for(Integer element : set) […]
在Ruby中,给定一个以下forms之一的数组… [apple, 1, banana, 2] [[apple, 1], [banana, 2]] 什么是最好的方式将其转换为哈希forms… {apple => 1, banana => 2}
假设我们在Java中有一个HashMap<String, Integer> 。 如何更新(增量)string的整数值为每个存在的string我find? 人们可以删除并重新进场,但是开销会是一个问题。 另一种方法是把新的一对,旧的将被replace。 在后一种情况下,如果发生与我试图插入的新密钥相冲突的情况,会发生什么? 哈希表的正确行为是为它指定一个不同的地方,或者在当前的存储桶中创build一个列表。
我试图使用一个HashMap,但得到错误: “typesjava.util.Map $ Entry无法parsing,它是从所需的.class文件间接引用” 我正在使用JDK 8和Eclipse。 有人知道为什么? 我的代码 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Map; import java.util.HashMap; public class Analyser { public void analyse() throws FileNotFoundException { HashMap<String, Integer> candyMap = new HashMap<String, Integer>(); BufferedReader br = new BufferedReader(new FileReader("Candy.txt")); for(String s=br.readLine(); s!=null; s=br.readLine()) { System.out.println(s); } } }
我试图找出一个特定情况下的最佳容量和负载因数。 我想我已经掌握了它的要点,但是我仍然要感谢比我更有认识的人的确认。 🙂 如果我知道我的HashMap将会填满100个对象,并且大部分时间会花费100个对象,那么我猜测最佳值是初始容量100和负载因子1? 或者我需要容量101,还是还有其他问题? 编辑:好的,我搁置了几个小时,做了一些testing。 结果如下: 奇怪的是,容量,容量+1,容量+2,容量-1甚至容量-10都会产生完全相同的结果。 我希望至less能力1和能力10能给出更坏的结果。 使用初始容量(而不是使用默认值16)可以提供显着的put()改进 – 速度提高多达30%。 使用1的负载因子可以为less量对象提供相同的性能,而对于大量对象(> 100000)则可以获得更好的性能。 但是,这并不能与对象的数量成比例地提高。 我怀疑还有其他因素会影响结果。 对于不同数量的对象/容量,get()性能有点不同,但是,虽然它可能会略有不同,但通常不受初始容量或负载因素的影响。 编辑2:在我的部分也添加一些图表。 这里是一个说明负载因子0.75和1之间的区别,在我初始化HashMap并填充满容量的情况下。 在y尺度上,以ms为单位的时间(越低越好),x尺度是尺寸(对象的数量)。 由于尺寸线性变化,所需时间也线性增长。 所以,让我们看看我得到了什么。 以下两个图表显示了负载因素的差异。 第一个图表显示了当HashMap被填充到容量时会发生什么; 加载因子0.75由于resize而变差。 然而,这并不总是更糟糕,而且还有各种各样的颠簸和跳跃 – 我猜测GC在这方面有一个重大的发挥。 负载系数1.25与1相同,因此不包含在图表中。 这个图表certificate0.75因resize而变差; 如果我们将HashMap填充到一半的容量,0.75不会更差,只是…不同(应该使用更less的内存,并具有不可思议的更好的迭代性能)。 还有一件事我想展示。 这是获得所有三个加载因子和不同的HashMap大小的性能。 除了一个负载因数为1的尖峰之外,总是保持不变。我真的很想知道这是什么(可能是GC,但是谁知道)。 这里是有兴趣的代码: import java.util.HashMap; import java.util.Map; public class HashMapTest { // capacity – numbers high as 10000000 require -mx1536m -ms1536m JVM parameters […]
你如何创build这个Java代码的JavaScript / JQuery等价物: Map map = new HashMap(); //Doesn't not have to be a hash map, any key/value map is fine map.put(myKey1, myObj1); map.put(myKey2, myObj2); //Repeat n times function Object get(k) { return map.get(k); }