Java哈希映射重复的bucket条目
我有一个关于HashMaps的问题。我们正在编写一个小型c(-ish)编译器,为此我们使用了一个符号表。我们正在使用hashmap实现这一点 现在,为了考虑作用域,我们使用堆栈。因此,每次我们进入一个新的作用域时,我们都会在堆栈上推送一个表示这个作用域的标记。然后,我们将hashmap中的所有键放在堆栈上,用于我们遇到的所有符号。到目前为止还不错 当我们退出作用域时,我们弹出堆栈,直到到达令牌。在此之前传递的每个符号都必须从hashmap中取出 给出以下代码:Java哈希映射重复的bucket条目,java,hashmap,Java,Hashmap,我有一个关于HashMaps的问题。我们正在编写一个小型c(-ish)编译器,为此我们使用了一个符号表。我们正在使用hashmap实现这一点 现在,为了考虑作用域,我们使用堆栈。因此,每次我们进入一个新的作用域时,我们都会在堆栈上推送一个表示这个作用域的标记。然后,我们将hashmap中的所有键放在堆栈上,用于我们遇到的所有符号。到目前为止还不错 当我们退出作用域时,我们弹出堆栈,直到到达令牌。在此之前传递的每个符号都必须从hashmap中取出 给出以下代码: { a = 5;
{
a = 5;
{
a = 5;
}
}
hashmap会接受这个吗?如中所示,我将使用a作为键输入它们。这不会是一个问题,但是当弹出并必须删除这些对象时,Java能够在这两个对象之间产生差异吗?或者第二个会覆盖第一个吗?我认为使用树是更好的解决方案。树的每个节点定义变量的可见性块。在嵌套块的情况下,叶节点将覆盖变量的值 我认为使用树是更好的解决方案。树的每个节点定义变量的可见性块。在嵌套块的情况下,叶节点将覆盖变量的值 映射javadoc 将键映射到值的对象。映射不能包含重复的 按键;每个键最多可以映射到一个值 地图javadoc 将键映射到值的对象。映射不能包含重复的 按键;每个键最多可以映射到一个值
不,这不起作用,因为映射中给定的键只能有一个值
我将在作用域之间使用委托机制。输入新范围时,创建一个新的范围对象,并将此范围中定义的每个新符号存储在范围对象包含的映射中。使Scope对象指向其封闭范围(从而委托给该封闭范围以查找映射中不存在的变量的值),然后使创建的范围成为当前范围。一旦退出块,只需获取结束范围的封闭范围并使其成为当前范围 不,这不起作用,因为映射中给定的键只能有一个值
我将在作用域之间使用委托机制。输入新范围时,创建一个新的范围对象,并将此范围中定义的每个新符号存储在范围对象包含的映射中。使Scope对象指向其封闭范围(从而委托给该封闭范围以查找映射中不存在的变量的值),然后使创建的范围成为当前范围。一旦退出块,只需获取结束范围的封闭范围并使其成为当前范围 我想向您推荐两种解决方案
我想向你推荐两种解决方案
嗯,我们会讨论这个可能性。嗯,我们会讨论这个可能性。