Java HashMap 重复存储桶条目

标签 java hashmap

我有一个关于 HashMap 的问题。我们正在编写一个 small-c(-ish) 编译器,为此我们使用了一个符号表。我们正在使用 HashMap 来实现它。

现在考虑范围,我们使用堆栈。因此,每次我们进入一个新的范围时,我们都会在堆栈上推送一个表示这一点的 token 。然后,我们将 hashmap 中的所有键放入堆栈中,用于我们遇到的所有符号。到目前为止一切顺利。

当我们退出范围时,我们弹出堆栈直到我们到达 token 。在此之前我们传递的每个符号都必须从 HashMap 中取出。

给定以下代码:

{ 
    a = 5;
    {
        a = 5;
    }
}

hashmap 会接受这个吗?比如,我会使用 a 作为键输入它们。这不会成为问题,但是当弹出并不得不删除它们时,Java 是否能够区分这两个对象?或者第二个会覆盖第一个吗?

最佳答案

我认为使用树是更好的解决方案。树的每个节点定义变量的可见性 block 。在嵌套 block 的情况下,叶节点将覆盖变量的值。

关于Java HashMap 重复存储桶条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7953788/

相关文章:

java - HashMap 数组列表 (java)

java - 获取典型库 1.7 中 simpledb 域的所有项目

java - 一个 HashMap ,其中值对象的字段是键?

java - 从 ArrayList 输出中删除 [] 并存储在 HashMap<String,Object> 中

模型类上反射 toString 中的 java.lang.ClassCastException : [Z cannot be cast to [Ljava. lang.String

java - 如何使用HashMap忽略字符串中的空格、大写字母和标点符号?

perl - 如何在 vscode 的 PerlDebug 中查看 hashmap 变量?

java - 用反射覆盖最终静态字段是否有限制?

java - 如何在 TextView Android 中将渐变设置为文本颜色以及在其周围添加描边?

java - 如果文件存在,如何锁定它而不创建它?