标签: hashtable

JavaScript中的哈希表

我在JavaScript中使用哈希表,我想在哈希表中显示以下值

one   -[1,10,5]
two   -[2]
three -[3, 30, 300, etc.]
Run Code Online (Sandbox Code Playgroud)

我找到了以下代码.它适用于以下数据.

   one  -[1]
   two  -[2]
   three-[3]
Run Code Online (Sandbox Code Playgroud)

如何将一个[1,2]值分配给哈希表以及如何访问它?

<script type="text/javascript">
    function Hash()
    {
        this.length = 0;
        this.items = new Array();
        for (var i = 0; i < arguments.length; i += 2) {
            if (typeof(arguments[i + 1]) != 'undefined') {
                this.items[arguments[i]] = arguments[i + 1];
                this.length++;
            }
        }

        this.removeItem = function(in_key)
        {
            var tmp_value;
            if (typeof(this.items[in_key]) != 'undefined') {
                this.length--;
                var tmp_value = this.items[in_key];
                delete this.items[in_key];
            }
            return tmp_value;
        }

        this.getItem = …
Run Code Online (Sandbox Code Playgroud)

javascript hashtable

41
推荐指数
4
解决办法
12万
查看次数

C的最小哈希函数?

我不能使用boost:hash因为我必须坚持使用C而不能使用C++.

但是,我需要散列大量(10K到100k)的令牌字符串(长度为5到40个字节),以便在这些字符串中搜索最快.

MD5,SHA1或任何长哈希函数对于一个简单的任务来说似乎太重了,我没有做加密.此外还有存储和计算成本.

因此我的问题是:

  1. 什么是最简单的哈希算法,可以确保在大多数实际情况下防止碰撞.

  2. 哈希值要使用多少位?我正在为32位系统开发.Perl/Python中的哈希算法是否也使用32位哈希?或者我必须跳到64?

  3. 关于常见脚本语言中哈希表的实现:实现是否检查冲突,还是可以完全避免该部分?

c hash hashtable

41
推荐指数
4
解决办法
5万
查看次数

41
推荐指数
4
解决办法
3万
查看次数

为什么HashMap要求初始容量为2的幂?

当我看到以下内容时,我正在浏览Java的HashMap源代码

//The default initial capacity - MUST be a power of two.
static final int DEFAULT_INITIAL_CAPACITY = 16;
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么这个要求首先存在?我还看到允许创建具有自定义容量的HashMap的构造函数将其转换为2的幂:

int capacity = 1;
while (capacity < initialCapacity)
  capacity <<= 1;
Run Code Online (Sandbox Code Playgroud)

为什么容量总是必须是2的幂?

此外,当执行自动重新散列时,究竟会发生什么?哈希函数也改变了吗?

java hash hashtable hashmap

41
推荐指数
2
解决办法
2万
查看次数

如何在Swift中为Int数组实现Hashable Protocol(自定义字符串结构)

我正在创建一个类似于a的结构String,除了它只处理Unicode UTF-32标量值.因此,它是一个数组UInt32.(有关更多背景,请参阅此问题.)

我想做的事

我希望能够将自定义ScalarString结构用作字典中的键.例如:

var suffixDictionary = [ScalarString: ScalarString]() // Unicode key, rendered glyph value

// populate dictionary
suffixDictionary[keyScalarString] = valueScalarString
// ...

// check if dictionary contains Unicode scalar string key
if let renderedSuffix = suffixDictionary[unicodeScalarString] {
    // do something with value
}
Run Code Online (Sandbox Code Playgroud)

问题

为此,ScalarString需要实现Hashable协议.我以为我可以这样做:

struct ScalarString: Hashable {

    private var scalarArray: [UInt32] = []

    var hashValue : Int {
        get {
            return self.scalarArray.hashValue // error
        } …
Run Code Online (Sandbox Code Playgroud)

arrays string hashtable ios swift

40
推荐指数
2
解决办法
3万
查看次数

在Java中迭代和删除Hashtable

我在Java中有一个Hashtable,想迭代表中的所有值,并在迭代时删除一个特定的键值对.

怎么可能这样呢?

java iterator hashtable

38
推荐指数
4
解决办法
11万
查看次数

为什么哈希表扩展通常通过加倍大小来完成?

我已经对哈希表进行了一些研究,并且我一直遵循经验法则,当有一定数量的条目(最大或通过75%的加载因子)时,应该扩展哈希表.

几乎总是,建议是将哈希表的大小加倍(或加倍加1,即2n + 1).但是,我没有找到一个很好的理由.

为什么要加倍大小,而不是将其增加25%,或者将其增加到下一个素数或下一个素数(例如三个)?

我已经知道,选择一个初始哈希表大小是一个素数通常是一个好主意,至少如果你的哈希函数使用模数,如通用哈希.我知道这就是为什么通常建议做2n + 1而不是2n(例如,http://www.concentric.net/~Ttwang/tech/hashsize.htm)

然而正如我所说,我没有看到任何真正的解释,为什么加倍或加倍加一个实际上是一个很好的选择,而不是选择新哈希表的大小的其他方法.

(是的,我已经阅读了关于哈希表的维基百科文章:) http://en.wikipedia.org/wiki/Hash_table

algorithm hash hashtable data-structures

38
推荐指数
2
解决办法
2万
查看次数

哈希表的时间复杂度

我对哈希表的时间复杂性感到困惑很多文章表明它们是"摊销的O(1)"而不是真正的命令O(1)这在实际应用中意味着什么.哈希表中的操作的平均时间复杂度是多少,实际实现中不是理论上的,为什么操作不正确O(1)?

big-o hashtable

38
推荐指数
2
解决办法
7万
查看次数

为什么由不同初始化集合构造的元组相等?

我期待以下两个元组

>>> x = tuple(set([1, "a", "b", "c", "z", "f"]))
>>> y = tuple(set(["a", "b", "c", "z", "f", 1]))
Run Code Online (Sandbox Code Playgroud)

比较不平等,但他们不:

>>> x == y
>>> True
Run Code Online (Sandbox Code Playgroud)

这是为什么?

python comparison tuples hashtable set

38
推荐指数
4
解决办法
2527
查看次数

在Java中创建Hashtable作为final

我们知道java中"final"关键字的用途.在将变量声明为final时,我们必须初始化变量.比如" final int a = 10;" 我们无法改变"a"的价值.但是如果我们选择HashTable,它甚至可以添加一些值,甚至可以将HashTable声明为final.

例::

 private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() 
{{     put("foo",      1);     
       put("bar",      256);     
       put("data",     3);     
       put("moredata", 27);     
       put("hello",    32);     
       put("world",    65536);  }}; 
Run Code Online (Sandbox Code Playgroud)

现在我宣布MYHASH HashTable为最终版.如果我尝试添加更多元素,它接受.

MYHASH.put("NEW DATA",      256);
Run Code Online (Sandbox Code Playgroud)

现在,"NEW DATA"被添加到HashTable中.我的问题是为什么它允许添加甚至其声明为最终????

java hashtable

37
推荐指数
5
解决办法
3万
查看次数