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

标签 java linked-list

我有一个类,它应该创建一个带有值链接列表的哈希表。如果 key 是新的,它会创建一个链接列表,如果它已经存在,则应该将其附加到列表的末尾。由于某种原因,当我使用 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中,那么所有内容都将被删除。

关于java - 为什么 Java 中的 addLast() 替换了我的链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17538297/

相关文章:

java - onSensorChanged() 未被调用

java - 如何在 java 中运行以下 Powershell 命令?

c - 这段代码在 Windows 上给了我未定义的行为,但在 Linux 上运行良好

c - C 链表中的内存泄漏

java - 私有(private)内部类的构造函数应该声明为公共(public)的还是私有(private)的?

java - JPA 性能 : Entity or Entity Id as query parameter?

c - 将字符串分配给结构中的指针 - 链表 C

c - C中的二进制搜索树程序表现异常

c - 字符串链表的每个节点都有相同的字符串

java - 将非静态变量更改为静态变量