在javascript中的哈希表和哈希映射

时间:2016-04-13 12:17:12

标签: javascript java hash hashmap hashtable

哈希表的内部表示&& hashmap是,

enter image description here

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

Javascript对象文字表示法,

var obj = {
           e1: 1,
           e2: 2,
           e3: 3  
         };

可以直接用作散列表和散列映射及其内部散列函数。 Object literal将字符串或符号作为键。

ES6还引入了window.Map作为键的任何值。

1)哈希表和hashmap的上述内部表示看起来是否正确? (或)hashtable和hashmap的内部表示有区别吗?

2)Javascript对象文字是否为hashtable / hashmap提供O(1)计算而没有任何冲突?

1 个答案:

答案 0 :(得分:1)

您的图片是实现hash table data structure的一种方式 - 还有其他方式。您的图片是"单独链接","开放寻址"是另一种常见的策略。从Java 7开始,HashtableHashMap都使用了一种链接形式(查看它们的Entry类),但Java 8引入了HashMap的大量重写(但不是{ {3}},因为它是一个传统的类)使用树结构而不是链的链表。关键是两个类使用的确切算法是一个实现细节,并且可能会在版本之间发生变化。

" HashMap中"和" Hashtable"只是由JDK定义的类名,它们不一定对应于特定的散列算法。 JavaScript没有单独的" HashMap"和" Hashtable"概念,因为他们不需要它们。 Java需要创建单独的HashMap类,因为Hashtable合同存在问题且无法安全纠正。

所以,回答你的问题:

1)排序;它没有恰当地代表Java 8的HashMap,但它在概念上并不遥远。 Hashtable仍然使用此算法,但您几乎不应使用Hashtable

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

相关问题