为什么Java中的addLast()替换了我的链表?

时间:2013-07-09 00:57:44

标签: java linked-list

我有一个类应该创建一个带有值的链表的哈希表。如果密钥是新的,它会创建一个链表,如果它已经存在,则应该将它附加到列表的末尾。出于某种原因,当我使用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);
    }

}

3 个答案:

答案 0 :(得分:3)

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

如果obj中的LinkedList最后出现,那么一切都将被移除。

答案 1 :(得分:1)

检查item =(SymbolTableItem)list.removeFirst();
isContained方法看起来搞砸了。

答案 2 :(得分:0)

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