hash散列中需要确定key和value的唯一确定关系。

hash散列便于快速的插入删除和修改,不便于查找最大值等其他操作

以下为字符和数字的hash散列:

function HashTable () {
this.table = new Array(137);
this.value = new Array();
this.simpleHash = simpleHash;
this.betterHash = betterHash;
this.display = display;
this.put = put;
this.get = get;
this.buildChains = buildChains; // 开链法解决碰撞
} function simpleHash (data) {
var total = 0;
for(var i =0; i<data.length; i++){
total= total + data.charCodeAt(i);
}
return total % this.table.length;
} function betterHash (data) {
var total = 0;
const h = 37; // 挑选合适的质数
data = data.toString();
for(var i=0;i<data.length; i++){
total = total*h + data.charCodeAt(i);
}
total = total % this.table.length;
if(total<0) {
return total+=this.table.length-1;
}
return parseInt(total);
} function put (key, value) {
var pos = this.betterHash(key);
if(this.table[pos] === undefined){
this.table[pos] = key;
this.value[pos] = value;
}else{
while(this.table[pos]!==undefined){
pos++
}
this.table[pos] = key;
this.value[pos] = value;
}
} function get(key) {
var hash = -1;
hash = this.betterHash(key);
if (hash > -1) {
for (var i = hash; this.table[hash] != undefined; i++) {
if (this.table[hash] == key) {
return this.value[hash];
}
}
}
return undefined;
} function display () {
var _this = this;
this.value.forEach(function(item, index){
if (item!==undefined) {
console.log(_this.table[index] + ": " + item);
} })
} function buildChains () {
this.table.forEach(function (item, index) {
item = new Array();
})
}

hash的使用方法:

function buildChains () {
this.table.forEach(function (item, index) {
item = new Array();
})
} var someNames = ["David", "Jennifer", "Donnie", "Raymond","Cynthia", "Mike", "Clayton", "Danny", "Jonathan", "Donnie"]; var hs = new HashTable();
someNames.forEach(function(item, index){
hs.put(item, item + "Val")
})
hs.display(); console.log(hs.get("David"))

js数据结构之hash散列的详细实现方法的更多相关文章

  1. js数据结构之栈和队列的详细实现方法

    队列 队列中我们主要实现两种: 1. 常规队列 2. 优先队列(实际应用中的排队加急情况等) 常规队列的实现方法如下: // 常规队列 function Queue () { this.queue = ...

  2. javascript数据结构与算法--散列

    一:javascript数据结构与算法--散列  一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...

  3. 算法与数据结构(十二) 散列(哈希)表的创建与查找(Swift版)

    散列表又称为哈希表(Hash Table), 是为了方便查找而生的数据结构.关于散列的表的解释,我想引用维基百科上的解释,如下所示: 散列表(Hash table,也叫哈希表),是根据键(Key)而直 ...

  4. JavaScript数据结构与算法-散列练习

    散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...

  5. PAT A1145 Hashing - Average Search Time (25 分)——hash 散列的平方探查法

    The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...

  6. java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区

    java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...

  7. 【hash】什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法【关于hash的详解】

    什么是hash,什么是哈希,什么是hash散列,什么是hash一致性算法

  8. [转]c# 对密码执行散列和 salt 运算方法

    本文转自:http://www.cnblogs.com/CnBlogFounder/archive/2008/07/04/1235690.html 大家对密码执行散列和Salt运算一定不陌生.两个Vi ...

  9. 【数据结构】之散列链表(Java语言描述)

    散列链表,在JDK中的API实现是 HashMap 类. 为什么HashMap被称为“散列链表”?这与HashMap的内部存储结构有关.下面将根据源码进行分析. 首先要说的是,HashMap中维护着的 ...

随机推荐

  1. java 多线程面试

    一.多线程的创建 1.多线程的创建 (1).继承Thread类 (2).实现Runnable接口 2.两种启动线程方法的区别 1.共同点 必须调用Thread 产生线程,然后调用start()方法 开 ...

  2. Sql Server 2008 数据库18456错误怎么解决?

    可以windows连接,以前都可以,昨天突然就不可以用SQL连接,报18456错误. 1.以windows验证模式进入数据库管理器. 2.右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码( ...

  3. 七、Sparse Autoencoder介绍

    目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合  ,其中  .自编码神经网络是一种无监督学习算法,它使用 ...

  4. python位运算之计算中位数

    # -*- coding: utf-8 -*- # @Time : 2018/11/23 10:49 PM # @Author : cxa # @File : 1.py # @Software: Py ...

  5. WPF当中StaticResource调用方法

    1.先在Converter命名空间当中,定义转换功能类: public sealed class BoolToValueConverter : System.Windows.Data.IValueCo ...

  6. pl sql 记住用户名密码

    tools--Preferences--Logon History 选择  “Store history”是默认勾选的,勾上“Store with password” 登录时从下拉框选择用户名则自动登 ...

  7. cocos2d-x播放视频的处理

    cocos2d-x是支持直接播放视频的,用的是Native端的播放器,视频的默认层级是在cocos的层级之上,如果是想让视频上面有cocos的控件,只能将视频的UI层级放在最下面,这个方法网上已经有比 ...

  8. 006_ssl监测及评分

    https://testssl.sh/ 一. https://www.ssllabs.com/ssltest/analyze.html?d=jyall.com 监测下jyll.com,不忍直视啊! 二 ...

  9. Oracle:SQL语句--对表的操作——修改表名

    – 修改表名(未验证在有数据,并且互有主外键时,是否可用) 语法: rename 现表名 to 新表名; 例: rename T_Student2 to T_Stu;

  10. Oracle 相关概念

    注:本文来源于 <腾科OCP培训课堂>.非准许商业活动. 标题:Oracle  相关概念 --->数据库名.实例名.数据库域名.全局数据名.服务名 一:数据库名 1:什么是数据库名 ...