多个函数调用中删除的HashMap值

时间:2015-01-08 23:49:07

标签: java parsing hashmap

我使用Java HashMap类作为语言解析器的“缓存”。我将首先简要介绍解析器,然后解释问题。

每次调用解析函数时,输入都会变成一个自定义对象数组,这些对象用语言的语法表示。为简单起见,我们称之为单词。例如:

“红房子” [THE,RED,HOUSE](单词列表)

然后在此ArrayList上运行解析算法。为了使我们的解析器更有效,我们考虑将这个ArrayList对象存储在HashMap中,映射到输出解析。每当我们遇到相同的ArrayList时,我们就可以返回存储的解析。

存储过程顺利。将对象插入HashMap后,HashMap的打印值包含键(ArrayList)和值(Parse)。代码如下:

this.typeCache.put(WordList, Parse);

其中WordList是ArrayList,而Parse是解析(显然)。稍后,当我尝试从缓存中检索时,系统会识别出WordList是一个键,但它检索的值为null。

if (this.typeCache.keySet().contains(WordList)) { 
    System.out.println("Retrieving from type Cache.");
    return this.typeCache.get(WordList);
} 

我确保存储值Parse是字段解析对象的克隆(它会改变每次迭代),因此对象不会改变。这也不是每次迭代都会擦除HashMap,因为我会在每个函数调用时将其打印出来,并且键保留在那里。它似乎只是正在改变的价值观。

这是否会发生这种情况?如果您需要更多信息,请与我们联系。

编辑:“Parse”值在技术上只是不同可能的解析的PriorityQueue。我相信这个类是自定义的,包含一个“克隆”方法,粘贴在下面:

public PriorityQueue<E> clone() {
    PriorityQueue<E> clonePQ = new PriorityQueue<E>();
    clonePQ.size = size;
    clonePQ.capacity = capacity;
    clonePQ.elements = new ArrayList<E>(capacity);
    clonePQ.priorities = new double[capacity];
    if (size() > 0) {
        clonePQ.elements.addAll(elements);
        System.arraycopy(priorities, 0, clonePQ.priorities, 0, size());
    }
    return clonePQ;
}

0 个答案:

没有答案