哈希表:基于数组,不能重复且无序
将名称及单词与下标或数字对应起来
1.将字母或单词转换成下标或数字(hashCode)——过程讲解:
方案一:数字相加——数组下标太小
方案二:幂的连乘——数组下标太多
方案改进:哈希化,例如取余操作
冲突:哈希化后依然有数组下标会重复
解决冲突的两种方案:1.链地址法(拉链法)2.开放地址法
一:链地址法
将冲突(产生冲突的元素一般比较少)的元素放到一个链表(或数组)中,将该链表存储于该数组下标位置处
二:开放地址法
寻找空白单元格来添加重复的数据(一般数组的空间会是实际数据需求空间的了两倍)
解决冲突方法:1.线性探测 2.二次探测(修改探测步长) 3.再哈希化的哈希函数 :stepSize=constant-(key%constant)
快速计算:霍纳法则
put插入数据函数的封装
get方法图解思路
删除数据
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function HashTable(){
this.storage = []
this.count = 0
this.limit = 7
HashTable.prototype.hashFunc = function(str, size){
//1.定义hashCode变量
var hashCode = 0
//2.根据霍纳算法,计算hashCode的值
//借助Unicode编码计算
for(var i=0; i< str.length; i&