Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java哈希映射重复的bucket条目_Java_Hashmap - Fatal编程技术网

Java哈希映射重复的bucket条目

Java哈希映射重复的bucket条目,java,hashmap,Java,Hashmap,我有一个关于HashMaps的问题。我们正在编写一个小型c(-ish)编译器,为此我们使用了一个符号表。我们正在使用hashmap实现这一点 现在,为了考虑作用域,我们使用堆栈。因此,每次我们进入一个新的作用域时,我们都会在堆栈上推送一个表示这个作用域的标记。然后,我们将hashmap中的所有键放在堆栈上,用于我们遇到的所有符号。到目前为止还不错 当我们退出作用域时,我们弹出堆栈,直到到达令牌。在此之前传递的每个符号都必须从hashmap中取出 给出以下代码: { a = 5;

我有一个关于HashMaps的问题。我们正在编写一个小型c(-ish)编译器,为此我们使用了一个符号表。我们正在使用hashmap实现这一点

现在,为了考虑作用域,我们使用堆栈。因此,每次我们进入一个新的作用域时,我们都会在堆栈上推送一个表示这个作用域的标记。然后,我们将hashmap中的所有键放在堆栈上,用于我们遇到的所有符号。到目前为止还不错

当我们退出作用域时,我们弹出堆栈,直到到达令牌。在此之前传递的每个符号都必须从hashmap中取出

给出以下代码:

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

hashmap会接受这个吗?如中所示,我将使用a作为键输入它们。这不会是一个问题,但是当弹出并必须删除这些对象时,Java能够在这两个对象之间产生差异吗?或者第二个会覆盖第一个吗?

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

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

映射javadoc

将键映射到值的对象。映射不能包含重复的 按键;每个键最多可以映射到一个值

地图javadoc

将键映射到值的对象。映射不能包含重复的 按键;每个键最多可以映射到一个值


不,这不起作用,因为映射中给定的键只能有一个值


我将在作用域之间使用委托机制。输入新范围时,创建一个新的范围对象,并将此范围中定义的每个新符号存储在范围对象包含的映射中。使Scope对象指向其封闭范围(从而委托给该封闭范围以查找映射中不存在的变量的值),然后使创建的范围成为当前范围。一旦退出块,只需获取结束范围的封闭范围并使其成为当前范围

不,这不起作用,因为映射中给定的键只能有一个值


我将在作用域之间使用委托机制。输入新范围时,创建一个新的范围对象,并将此范围中定义的每个新符号存储在范围对象包含的映射中。使Scope对象指向其封闭范围(从而委托给该封闭范围以查找映射中不存在的变量的值),然后使创建的范围成为当前范围。一旦退出块,只需获取结束范围的封闭范围并使其成为当前范围

我想向您推荐两种解决方案

  • 地图的用户地图。这就是JNDI的工作原理。每个名称空间可能包含变量本身和映射自身的子文本,也可能包含其级别的变量
  • 对键使用点符号。在外部上下文中定义的第一个变量a类似于1.a,第二个变量类似于1.1.a
    我想向你推荐两种解决方案

  • 地图的用户地图。这就是JNDI的工作原理。每个名称空间可能包含变量本身和映射自身的子文本,也可能包含其级别的变量
  • 对键使用点符号。在外部上下文中定义的第一个变量a类似于1.a,第二个变量类似于1.1.a
    嗯,我们会讨论这个可能性。嗯,我们会讨论这个可能性。