javascript中的哈希表和哈希映射

javascript中的哈希表和哈希映射,javascript,java,hash,hashmap,hashtable,Javascript,Java,Hash,Hashmap,Hashtable,哈希表的内部表示形式为&&hashmap 在Java中,hashtable和hashmap在同步/异步操作方面是有区别的,否则内部表示是相同的 Javascript对象文字符号 var obj = { e1: 1, e2: 2, e3: 3 }; 通过其内部哈希函数,可以直接用作哈希表和哈希映射。对象文字具有字符串或符号作为键 ES6还引入了window.Map,将任意值作为键 1) hashtable和h

哈希表的内部表示形式为&&hashmap

在Java中,hashtable和hashmap在同步/异步操作方面是有区别的,否则内部表示是相同的

Javascript对象文字符号

var obj = {
           e1: 1,
           e2: 2,
           e3: 3  
         };
通过其内部哈希函数,可以直接用作哈希表和哈希映射。对象文字具有字符串或符号作为键

ES6还引入了
window.Map
,将任意值作为键

1) hashtable和hashmap的上述内部表示看起来正确吗?(或者)hashtable和hashmap的内部表示是否存在差异

2) Javascript object literal是否为hashtable/hashmap提供了O(1)计算而没有任何冲突?

您的图片是实现a的一种方法-还有其他方法。您的图像是“单独链接”的一个示例,“开放寻址”是另一个常见的策略。到了Java 7,两者都使用了一种链接形式(查看它们的
条目
类),但是Java 8引入了大量的重写(但不是,因为它是一个遗留类),以使用树结构而不是链表作为其链。这两个类使用的精确算法是一个实现细节,在不同版本之间可能会有所变化

“HashMap”和“Hashtable”只是JDK定义的类名,它们不一定对应于特定的哈希算法。JavaScript没有单独的“HashMap”和“Hashtable”概念,因为它们不需要它们。Java需要创建一个单独的
HashMap
类,因为
Hashtable
契约有问题,无法安全地更正

因此,要回答您的问题:

1) 有点;它不能正确地表示Java8的
HashMap
,但它在概念上并不遥远
Hashtable
仍然使用此算法,但您几乎不应该使用
Hashtable

2) 正如您所说,JavaScript对象在封面下使用哈希表数据结构。这(通常)提供O(1)字段访问,但与任何哈希表实现一样,它必须处理冲突的可能性。如链接到的问题@overexchange中所述。

请参阅此问题: