Tag: hashmap

Java HashMap containsKey为现有对象返回false

我有一个用于存储对象的HashMap: private Map fields = Collections.synchronizedMap(new HashMap()); 但是,当试图检查密钥的存在时, containsKey方法返回false 。 equals和hashCode方法,但找不到密钥。 调试一段代码时: return fields.containsKey(bean) && fields.get(bean).isChecked(); 我有: bean.hashCode() = 1979946475 fields.keySet().iterator().next().hashCode() = 1979946475 bean.equals(fields.keySet().iterator().next())= true fields.keySet().iterator().next().equals(bean) = true 但 fields.containsKey(bean) = false 什么可能导致这种奇怪的行为? public class Address extends DtoImpl implements Serializable{ @Override public int hashCode() { final int prime = 31; int result = 1; result […]

对于Java HashMap上的每个循环

我写的基本聊天程序有几个关键词,可以生成特殊的动作,图像,消息等。我将所有关键词和特殊函数存储在HashMap中。 关键词是键,function是值。 我想将用户输入与键与某种类型的循环进行比较。 我已经尝试了我能想到的一切,没有任何作用。 这是我能弄清楚的: myHashMap = for(String currentKey : ){ if(user.getInput().equalsIgnoreCase(currentKey)){ //Do related Value action } } … 我将不胜感激任何帮助。 如果我忽略了类似的问题或答案是否明显,请原谅我。

Java中可排序的类似HashMap的数据结构?

Java中是否存在某种类似于可以按键或值排序的HashMap的数据结构? 在PHP中,您可以使用可排序的关联数组。 Java中有这样的东西吗?

在哈希映射中获取前10个值

我试图找出如何从HashMap获得前10个值。 我最初尝试使用TreeMap并按值排序,然后取前10个值,但似乎这不是选项,因为TreeMap按键排序。 我想仍然能够知道哪些键具有最高值,映射的K, V是String, Integer 。

带有Int数组的Java HashMap

我正在使用此代码来检查HashMap中是否存在该数组。 public class Test { public static void main(String[]arg) { HashMap map= new HashMap(); map.put(new int[]{1,2}, “sun”); System.out.println(map.containsKey((new int[]{1,2}))); } } 但这打印错误。 如何检查HashMap中是否存在该数组。 提前致谢。

为什么Java编译器不喜欢原始int作为HashMap中值的类型?

编译器抱怨这段代码: HashMap userName2ind = new HashMap(); for (int i=0; i<=players.length; i++) { userName2ind.put(orderedUserNames[i],i+1); } 它写出“意外类型”并指向int 。 如果我用String替换int而i+1用i+”1″替换,则编译就可以了。 这里有什么问题?

将字符串拆分为键值对

我有一个像这样的字符串: pet:cat::car:honda::location:Japan::food:sushi Now :表示键值对,而::分隔对。 我想将键值对添加到地图中。 我可以使用以下方法实现: Map map = new HashMap(); String test = “pet:cat::car:honda::location:Japan::food:sushi”; String[] test1 = test.split(“::”); for (String s : test1) { String[] t = s.split(“:”); map.put(t[0], t[1]); } for (String s : map.keySet()) { System.out.println(s + ” is ” + map.get(s)); } 但有没有一种有效的方法呢? 我觉得代码是低效的,因为我使用了2个String[]对象并且调用了split函数两次。 另外,我使用t[0]和t[1] ,如果没有值,可能抛出ArrayIndexOutOfBoundsException 。

ConcurrentHashMap put vs putIfAbsent

Java Docs说, putIfAbsent相当于 if (!map.containsKey(key)) return map.put(key, value); else return map.get(key); 因此,如果密钥存在于地图中,则不会更新其值。 它是否正确? 如果我想根据某些标准更新密钥值怎么办? 说过期时间等 这是否是添加和更新缓存的更好的方法? public void AddToCache(T key, V value) { V local = _cache.putifabsent(key, value); if(local.equals(value) && local.IsExpired() == false){ return; } // this is for updating the cache with a new value _cache.put(key, value); }

如何在Java中创建哈希表?

在Java中创建哈希表(或关联数组…)最直接的方法是什么? 我的google-fu已经出现了几个例子,但是有没有标准的方法来做到这一点? 有没有办法用键 – >值对列表填充表,而无需在每个对的对象上单独调用add方法?

在Java 8中更改为HashMap哈希函数

在java 8 java.util.Hashmap中,我发现了一个变化: static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); 到 : static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 从代码中可以看出,新函数是低16位的简单XOR ,高16位保持高16位不变,与之前实现中的几个不同的位移相反,并且从评论中看,这不太有效。将较低位的大量冲突的散列函数的结果分配给不同的桶,但通过减少操作来节省CPU周期。 我在发行说明中看到的唯一一件事就是从链接列表到平衡树的变化以存储碰撞键(我认为这可能会改变计算好哈希的时间量),我特别感兴趣的是看到如果此更改对大型哈希映射有任何预期的性能影响。 是否有关于此更改的任何信息,或者是否有更好的哈希函数知识的人知道此更改的含义可能是什么(如果有的话,我可能只是误解了代码)以及是否需要生成哈希迁移到Java […]