我正在开发一种语言和虚拟机。语言是基于类的,动态类型的,它是静态范围的。
示例类如下所示:
class Foo
{
var bar
{
function get { return bar; }
function set(value) { bar = value; }
}
function f1() {...}
function f2() {...}
}
在类中声明的实例变量受到保护,可以通过setter / getter函数访问。在类中声明的函数是public。
在运行时,实例变量可以存储在数组中,因此在此示例中,bar将存储在该数组的索引0处,编译器将负责在其getter函数中生成正确的LOAD 0指令。
其他功能怎么样?使用数组存储函数肯定会导致比使用哈希表更快的运行时访问,但我想知道可能是什么缺点。我的意思是如果我想支持在运行时向类添加函数的能力?最重要的是什么?
使用哈希表来存储方法而不是常规数组有什么好处?
答案 0 :(得分:0)
如果动态输入语言,则需要能够按名称查找方法/成员函数。
您可以使用包含名称和过程链接的数组,您可以使用树,您可以使用链接列表,您可以使用散列,或者您可以使用其他一些数据结构,但您必须同时存储程序的名称和程序的链接,以便您可以按名称查找。
对于大数字条目,散列表往往更有效率,但对于少量条目,您有时会花费更多时间在每次查找上查找名称,而不是仅仅扫描数组。
所以,为了回答你的问题,哈希表的优势在于,当人们将大量方法(100,1000)放入一个类时,方法查找时间不会增加。
散列表的缺点是,对于具有少量方法的类(少于几十个,作为猜测),它们可能会使方法查找时间更长。