为什么Java中的addLast()会取代我的链表



我有一个类,它应该创建一个带有值链接列表的哈希表。如果键是新的,它会创建一个链表,如果它已经存在,它应该将它附加到列表的末尾。出于某种原因,当我使用addLast()时,它会替换列表中的内容。你能看出我做错了什么吗?这是我的密码。非常感谢。

import java.util.*;
public class Semantic {
    String currentScope;
    Stack theStack = new Stack();
    HashMap<String, LinkedList> SymbolTable= new HashMap<String, LinkedList>();

    public boolean insertSymbol(String key, SymbolTableItem value){
        LinkedList<SymbolTableItem> temp = new LinkedList<SymbolTableItem>();
        SymbolTableItem obj;
        if(!isContained(SymbolTable.get(key), value)){
            if(SymbolTable.get(key) != null){
                temp = SymbolTable.get(key);
            }
            temp.addLast(value);
            SymbolTable.put(key, temp);
            return true;
        }
        return false;
    }
    public boolean isContained(LinkedList list, SymbolTableItem obj){
        if(list == null) return false;
        while(!list.isEmpty()){
            SymbolTableItem item;
            item = (SymbolTableItem) list.removeFirst();
            if(item.equals(obj))
                return true;
        }
        return false;
    }
    public String printValues(){
        return SymbolTable.toString();
    }
    public boolean isBoolean(){
        return true;
    }
    public boolean isTypeMatching(){
        return true;
    }
    public void stackPush(String theString){
        theStack.add(theString);
    }
}

方法isContained删除搜索元素SymbolTableItem obj之前的所有元素。

如果obj最后出现在LinkedList中,则所有内容都将被删除。

检查项目=(SymbolTableItem)list.removeFirst()
isContainerd方法看起来一团糟。

在测试值是否为新值之前,您似乎正在创建一个新的链表。在尝试检索该值之前,请尝试不创建链接列表。

相关内容

  • 没有找到相关文章