我需要使用JavaScript存储一些统计信息,就像我在C#中这样做:
Dictionary<string, int> statistics;
statistics["Foo"] = 10;
statistics["Goo"] = statistics["Goo"] + 1;
statistics.Add("Zoo", 1);
Run Code Online (Sandbox Code Playgroud)
JavaScript中是否有Hashtable类似的东西Dictionary<TKey, TValue>?
我怎么能以这种方式存储价值?
什么是相似的Python字典,但在Bash中(应该适用于OS X和Linux).
我正在寻找哈希表如何工作的解释 - 用像我这样的傻瓜的简单英语!
例如,我知道它需要密钥,计算哈希值(我正在寻找解释如何)然后执行某种模数来计算它存储在存储值的数组中的位置,但这就是我的知识停止的地方.
任何人都可以澄清这个过程吗?
编辑:我没有具体询问如何计算哈希码,而是概述哈希表的工作原理.
我想弄清楚何时以及为什么要使用Dictionary或HashTable.我在这里做了一些搜索,发现有人在谈论字典的一般优点,我完全赞同,这导致拳击和拆箱优势,以获得轻微的性能提升.
但是我也读过字典并不总是按照它们插入的顺序返回对象,它被排序的东西.作为HashTable的地方.据我了解,这导致HashTable在某些情况下更快.
我的问题是,这些情况可能是什么?我上面的假设我错了吗?你可以用什么情况来选择一个在另一个之上,(是的,最后一个有点含糊不清).
如果我通过相同的密钥多次HashMap的put方法,会发生什么原始值?如果价值重复怎么办?我没有找到任何关于此的文件.
案例1:密钥的覆盖值
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
System.out.println(mymap.get("1"));
Run Code Online (Sandbox Code Playgroud)
我们得到了surely not one.
案例2:重复值
Map mymap = new HashMap();
mymap.put("1","one");
mymap.put("1","not one");
mymap.put("1","surely not one");
// The following line was added:
mymap.put("1","one");
System.out.println(mymap.get("1"));
Run Code Online (Sandbox Code Playgroud)
我们得到了one.
但是其他价值观会发生什么?我正在向学生教授基础知识,我被问到这个问题.是Map一个桶,其中引用了最后一个值(但在内存中)?
Python中的一个基本数据结构是字典,它允许用户记录"键"以查找任何类型的"值".这在内部实现为哈希表吗?如果没有,那是什么?
我正在尝试为字符串设想一个好的哈希函数.而且我认为总结字符串中前五个字符的unicode值可能是一个好主意(假设它有五个,否则在它结束时停止).这是一个好主意,还是一个坏主意?
我在Java中这样做,但我不认为这会产生很大的不同.
因此,如果我必须在哈希表或前缀树之间进行选择,那么哪些区别因素会导致我选择一个而不是另一个.从我自己的天真的角度来看,似乎使用trie有一些额外的开销,因为它没有存储为数组但是就运行时而言(假设最长的键是最长的英语单词)它可以基本上是O (1)(就上限而言).也许最长的英文单词是50个字符?
获得索引后,哈希表会立即查找.然而,散列获得索引的关键似乎很容易接近50步.
有人能为我提供更有经验的观点吗?谢谢!
什么是正确和好的实施方式__hash__()?
我在谈论返回哈希码的函数,该哈希码随后用于将对象插入哈希表,即字典.
当__hash__()返回一个整数并用于将对象"分箱"为哈希表时,我假设返回的整数的值应该为公共数据均匀分布(以最小化冲突).获得这些价值观的好习惯是什么?碰撞是一个问题吗?在我的例子中,我有一个小类,它充当一个容器类,包含一些int,一些浮点数和一个字符串.
hashtable ×10
dictionary ×5
hash ×3
hashmap ×3
java ×3
collections ×2
hashcode ×2
python ×2
.net ×1
algorithm ×1
bash ×1
c# ×1
javascript ×1
modulo ×1
trie ×1