散列表

语雀入口

 https://www.yuque.com/along-n3gko/ezt5z9

介绍

  散列是一种常用的数据存储技术,散列后的数据可以快速的插入或取用。散列所使用的数据结构叫散列表。

  散列算法的作用是尽可能的在数据结构中找到一个值。

  基本特点:插入,删除,取用数据都非常快,但是查询效率很低,如果你希望快速查找一般是借助其他的数据结构,比如二叉查找树。 

示例

  我们将要使用最常见的散列函 数——lose lose”散列函数,方法是简单地将每个键值中的每个字母的ASCII值相加。

  

HashTable类

  先实一个简单的散列函数,它是HashTable类中的一个私有方法:

1 var loseloseHashCode = function (key) {
2     var hash = 0; //存储ASCII总和
3     for (var i = 0; i < key.length; i++) { //对key值遍历
4         hash += key.charCodeAt(i); //计算每个字符的ASCII值相加
5     }
6     return hash % 37; //和任意数做除法
7 };

完整代码

 1 class hashTable {
 2     constructor() {
 3         this.table = new Array(7);
 4     }
 5     put(key) {
 6         let pos = this.loseloseHashCode(key);
 7         this.table[pos] = key;
 8 
 9     }
10     get(key) {
11         return table[loseloseHashCode(key)];
12     }
13     remove(key) {
14         table[loseloseHashCode(key)] = undefined;
15     }
16     showDistro() {
17         let n = 0;
18         for (let i = 0, len = this.table.length; i < len; ++i) {
19             if (this.table[i] !== 'undefined') {
20                 console.log(`${i}:${this.table[i]}`)
21             }
22         }
23     }
24     loseloseHashCode(key) {
25         var hash = 0;
26         for (var i = 0; i < key.length; i++) {
27             hash += key.charCodeAt(i);
28         }
29         console.log('hashValue:' + hash)
30         return hash % this.table.length;
31     }
32 }
33 
34 let dataa = ['Clayton', 'Raymond', 'kitty', 'Miachale'];
35 let htable = new hashTable();
36 dataa.forEach(item=>{
37   htable.put(item)
38 })
39 htable.showDistro()
40 
41 //执行结果
42 hashValue:730
43 hashValue:730
44 hashValue:565
45 hashValue:788
46 0:undefined
47 1:undefined
48 2:Raymond
49 3:undefined
50 4:Miachale
51 5:kitty
52 6:undefined

  结论:simpleHash在计算某些值的哈希值时,会有键一样而丢失的情况,那么需要一个更好的散列函数。

 

原文地址:https://www.cnblogs.com/alongup/p/12899745.html