TypeScript方式实现源码

// 特性:
// 散列算法的作用是尽可能快地在数据结构中找到一个值。 在之前的章节中, 你已经知道如果
// 要在数据结构中获得一个值(使用get方法) ,需要遍历整个数据结构来找到它。如果使用散列
// 函数,就知道值的具体位置,因此能够快速检索到该值。散列函数的作用是给定一个键值,然后
// 返回值在表中的地址 //  put(key,value):向散列表增加一个新的项(也能更新散列表)
//  remove(key):根据键值从散列表中移除值
//  get(key):返回根据键值检索到的特定的值
//  loseloseHashCode(key):散列函数
//  put(key):
 /**
* 散列表
* @desc 与Set类相似,ECMAScript 6同样包含了一个Map类的实现,即我们所说的字典
*/
class HashTable {
private table = [];
public put(key, value) {
let position = HashTable.loseloseHashCode(key);
console.log('position' + '-' + key);
this.table[position] = value;
}
public remove(key) {
this.table[HashTable.loseloseHashCode(key)] = undefined;
}
public get(key) {
return this.table[HashTable.loseloseHashCode(key)];
}
private static loseloseHashCode(key) {
// 不够完善
// let hash = 0;
// for (let i = 0; i < key.length; i++) {
// hash += key.charCodeAt(i);
// }
// return hash % 37;
// 更好的实现方式
let hash = ;
for (var i = ; i < key.length; i++) {
hash = hash * + key.charCodeAt(i);
}
return hash % ;
}
}

散列表 HashTable

JavaScript方式实现源码

 /**
* 散列表
* @desc 与Set类相似,ECMAScript 6同样包含了一个Map类的实现,即我们所说的字典
*/
var HashTable = (function () {
function HashTable() {
this.table = [];
}
HashTable.prototype.put = function (key, value) {
var position = HashTable.loseloseHashCode(key);
console.log('position' + '-' + key);
this.table[position] = value;
};
HashTable.prototype.remove = function (key) {
this.table[HashTable.loseloseHashCode(key)] = undefined;
};
HashTable.prototype.get = function (key) {
return this.table[HashTable.loseloseHashCode(key)];
};
HashTable.loseloseHashCode = function (key) {
// 不够完善
// let hash = 0;
// for (let i = 0; i < key.length; i++) {
// hash += key.charCodeAt(i);
// }
// return hash % 37;
// 更好的实现方式
var hash = ;
for (var i = ; i < key.length; i++) {
hash = hash * + key.charCodeAt(i);
}
return hash % ;
};
return HashTable;
}());

散列表 HashTable

JavaScript 散列表(HashTable)的更多相关文章

  1. javascript散列表实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 深入浅出数据结构C语言版(14)——散列表

    我们知道,由于二叉树的特性(完美情况下每次比较可以排除一半数据),对其进行查找算是比较快的了,时间复杂度为O(logN).但是,是否存在支持时间复杂度为常数级别的查找的数据结构呢?答案是存在,那就是散 ...

  3. JavaScript数据结构——集合、字典和散列表

    集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...

  4. JavaScript 哈希表(散列表)应用

    查找的效率与比较次数密切相关.基于比较的程序,运算效率是比较低的.比如平时可以通过indexOf查找一个数据.但这是一个基于比较的一个实现.如果是淘宝那样有上亿个商品,那么用indeOf 来查数据就会 ...

  5. 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表

    本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...

  6. JavaScript 哈希表(散列表)实现和应用

    查找的效率与比较次数密切相关.基于比较的程序,运算效率是比较低的.比如平时可以通过indexOf查找一个数据.但这是一个基于比较的一个实现.如果是淘宝那样有上亿个商品,那么用indeOf 来查数据就会 ...

  7. JavaScript数据结构——字典和散列表的实现

    在前一篇文章中,我们介绍了如何在JavaScript中实现集合.字典和集合的主要区别就在于,集合中数据是以[值,值]的形式保存的,我们只关心值本身:而在字典和散列表中数据是以[键,值]的形式保存的,键 ...

  8. 【阅读笔记:散列表】Javascript任何对象都是一个散列表(hash表)!

    什么是散列表? 散列表是Dictionary(字典)的一种散列表实现方式,字典传送门 一个很常见的应用是使用散列表来表示对象.Javascript语言内部就是使用散列表来表示每个对象.此时,对象的每个 ...

  9. HashTable(散列表)

    最近都在研究数据结构,关于hashtable,或者叫做散列表,过去一直不了解是什么东西,现在终于明白了. 所谓hashtable,就是某组key,通过某个关系(函数),得到一个与之对应的映射值(在计算 ...

随机推荐

  1. 斑马ZPL指令加入如换行、回车等控制符的方法

    在程序中可能会被过滤掉,直接在指令中加入ASCII对应的16进制字符即可解决改问题, 语法:_十六进制(ASCII) 栗子:hello_0D_0Aworld  换行 扫描结果: hello world

  2. 『BUG』Android Studio 64位 始终提示 JVM 启动不了,JDK配置失败,error code -1

    前几天 安装了 Android Studio 2.2. 本来一切都好,但是当我修改了 配置文件 studio64.exe.vmoptions 想修改 最大内存(保证运行流畅)后,AS 就再也运行不了了 ...

  3. Leetcode 4——Partition List

    Problems: Given a linked list and a value x, partition it such that all nodes less than x come befor ...

  4. 用Python满足满足自己的“小虚荣”

    首先声明,学习这个只是为了好玩,只是为了好玩,并不是想用这个弄虚作假,做一些不好的事情!一心想做技术人,自制自治! 我们有时候发布一篇日志,或者是一篇博文,总希望自己的浏览量能高点,这样看起来也倍有面 ...

  5. 简单的C语言编译器--词法分析器

    1. 定义词法单元Tag   首先要将可能出现的词进行分类,可以有不同的分类方式.如多符一类:将所有逗号.分号.括号等都归为一类,或者一符一类,将一个符号归为一类.我这里采用的是一符一类的方式.C代码 ...

  6. JAVA反射机制基础概念

    反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力.通过这种能力可以彻底的了解自身的情况为下一步的动作做准备.下面具体介绍一下java的反射机制.这里你将颠覆原来对java的理解. J ...

  7. git中级技能

    中级技能(上)               一.实验说明 从本节开始,我们会介绍一些中级和高级的用法,这些用法很少用到,前面三节的内容已经满足了日常工作需要,从本节开始的内容可以简单了解,需要的时候再 ...

  8. Project facet is Java version 1.7 is not spported

    在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not supported." 项目中的jdk1.7不支持.说明项目是其 ...

  9. MySQL-压缩版-windows安装

    1.首先去dev.mysql.com/downloads/mysql/下载MySQL的压缩包,然后解压到任意盘符下. 2.打开系统变量在Path下追加mysql的路径(例如:C:\mysql-5.7. ...

  10. LeetCode & Q189-Rotate Array-Easy

    Array Description: Rotate an array of n elements to the right by k steps. For example, with n = 7 an ...