哈希表的内部表示&& hashmap是,
在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)计算而没有任何冲突?
答案 0 :(得分:1)
您的图片是实现hash table data structure的一种方式 - 还有其他方式。您的图片是"单独链接","开放寻址"是另一种常见的策略。从Java 7开始,Hashtable
和HashMap
都使用了一种链接形式(查看它们的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
链接的问题所讨论的那样。