Tag: hashmap

Java中的最终静态变量是否安全?

我已经阅读了很多,但没有找到明确的答案。 我有一个看起来像这样的课程: public class Foo() { private static final HashMap sharedData; private final HashMap myRefOfInnerHashMap; static { // time-consuming initialization of sharedData final HashMap innerMap = new HashMap; innerMap.put… innerMap.put… …a sharedData.put(someKey, java.util.Collections.unmodifiableMap(innerMap)); } public Foo(String key) { this.myRefOfInnerHashMap = sharedData.get(key); } public void doSomethingUseful() { // iterate over copy for (Map.Entry entry : this.myRefOfInnerHashMap.entrySet()) […]

高效的hashCode()实现

我经常使用IntelliJ IDEA自动生成类的hashCode()方法,通常该方法采用以下forms: result = 31 * result + … 我的问题是乘以31的目的是什么? 我知道这是一个素数,但为什么选择31? 另外,如果为特别小/大的数据集实现hashCode() ,人们会以不同的方式处理这个问题吗?

从hashmap存储和检索ArrayList值

我有一个以下类型的hashmap HashMap<String,ArrayList> map=new HashMap<String,ArrayList>(); 存储的值如下: mango | 0,4,8,9,12 apple | 2,3 grapes| 1,7 peach | 5,6,11 我想存储以及使用Iterator或任何其他方式使用最少的代码行获取那些整数。我该怎么办? 编辑1 当密钥与适当的行匹配时,数字是随机添加的(不是一起)。 编辑2 添加时如何指向arraylist? 我在行map.put(string,number);添加一个新的数字18时遇到错误map.put(string,number);

LinkedHashMap的内部实现与HashMap实现有何不同?

我读到HashMap具有以下实现: main array ↓ [Entry] → Entry → Entry ← linked-list implementation [Entry] [Entry] → Entry [Entry] [null ] 因此,它有一个Entry对象数组。 问题: 我想知道如果相同的hashCode但不同的对象,这个数组的索引如何存储多个Entry对象。 这与LinkedHashMap实现有何不同? 它是map的双链表实现,但它是否像上面那样维护一个数组,它如何存储指向下一个和前一个元素的指针?

当我创建对象的新实例作为键时,Java HashMap.get()返回null

我正在制作一个电子表格应用程序,我正在使用HashMap将数据存储在单元格中。 作为关键我使用的是Point类,它只有行数和列数。 我遇到的问题是,如果我使用带有新Point的HashMap.get(),它将返回一个空值。 HashMap cache = new HashMap(); Point p1 = new Point(1,1); Point p2 = new Point(2,2); cache.put(p1, “Test: 1,1”); cache.put(p2, “Test: 2,2”); int maxRow = 2; int maxCol = 2; for (int i = 1; i <= maxRow; i++) { for (int j = 1; j <= maxCol; j++) { System.out.print(cache.get(new Point(i,j))); if […]

为什么在哈希映射中使用空值或空键是有用的?

Hashtable不允许使用null键或值,而HashMap允许使用空值和1个null键。 问题: 为什么会这样? 在HashMap中使用这样的键和值有什么用?

具有不同初始容量和负载因子的HashMap的性能

这是我的情况。 我使用两个java.util.HashMap将一些常用数据存储在Tomcat上运行的Java Web应用程序中。 我知道每个Hashmap的确切条目数。 键分别为字符串和整数。 我的问题是,设置初始容量和loadfactor的最佳方法是什么? 我应该将容量设置为等于它将具有的元素数量和负载容量为1.0吗? 我想在不使用太多内存的情况下获得绝对最佳性能。 但是,我担心桌子不能最佳填充。 使用所需的确切大小的表,是否会发生键碰撞,导致(通常是短暂的)扫描找到正确的元素? 假设(并且这是一个延伸)哈希函数是整数键的简单mod 5,这并不意味着键5,10,15将击中相同的桶然后导致搜索填充旁边的桶他们? 更大的初始容量会提高性能吗? 此外,如果有一个比hashmap更好的数据结构,我对此也完全开放。

Java中的HashMap,1亿条目

我想将1亿个术语及其频率(在文本数据库中)存储到HashMap 。 它给了我“Out of Memory”错误。 我试图将堆空间增加到-Xmx15000M 。 然而,它运行半小时然后再次抛出相同的exception。 我正在尝试读取单词和频率的文件大小为1.7GB。 任何帮助将非常感激。 谢谢 :-)

令牌语法错误

我收到一个我不明白的错误: 此行的多个标记 – 令牌上的语法错误,错位的构造 – 令牌上的语法错误,删除这些令牌 以下是我的类代码,错误发生在第8行(标记): import java.util.*; public class stringCalculator { String operator_array[] = {“+”, “-“, “/”, “*”, “(“, “)”}; Queue outputQueue = new LinkedList(); Stack operatorStack = new Stack(); Hashtable precendece = new Hashtable(); precedence.put(“+”, 2); <=========== This is where the error occurs public void printTokenList(String [] expression, int length) { for(int […]

java.util.HashMap中的无限循环

我在这里经常有一些Vaadin代码阻塞,我不知道问题是什么: Thread 7892: (state = IN_JAVA) – java.util.HashMap.getEntry(java.lang.Object) @bci=61, line=349 (Compiled frame; information may be imprecise) – java.util.HashMap.containsKey(java.lang.Object) @bci=2, line=335 (Compiled frame) – java.util.HashSet.contains(java.lang.Object) @bci=5, line=184 (Compiled frame) – com.vaadin.ui.Table.unregisterPropertiesAndComponents(java.util.HashSet, java.util.HashSet) @bci=85, line=1693 (Compiled frame) – com.vaadin.ui.Table.refreshRenderedCells() @bci=992, line=1641 (Compiled frame) – com.vaadin.ui.Table.valueChange(com.vaadin.data.Property$ValueChangeEvent) @bci=23, line=2897 (Compiled frame) – com.vaadin.data.util.IndexedContainer.firePropertyValueChange(com.vaadin.data.util.IndexedContainer$IndexedContainerProperty) @bci=140, line=553 (Compiled frame) – com.vaadin.data.util.IndexedContainer.access$1000(com.vaadin.data.util.IndexedContainer, […]