代码改变世界

js模拟散列

2018-06-19 17:06  muamaker  阅读(289)  评论(0编辑  收藏  举报
	//散列
	//类似于 对象存储,key-value
	// 存入前,先将key进行hash编码,然后存入
	function HashTable(){
		var hashData = [];
		this.djb2HashCode = function(key){
			//散列函数算法
			var hash = 5381;
			for(var i = 0; i < key.length; i++){
				hash = hash *33  + key.charCodeAt(i);
			}
			return hash % 1013;
		};
		this.put = function(key,ele){
			hashData[this.djb2HashCode(key)] = ele;
		};
		this.remove = function(key){
			hashData[this.djb2HashCode(key)] = undefined;
		};
		this.print = function(){
			console.log(hashData.toString());
		};
	}
	
	var hash = new HashTable();
	
	hash.put("name","kite");
	hash.put("age",20);
	hash.print();
	
	//解决散列的 key重复冲突有三种办法
	//分离链接、线性探查和双散列法
	//分离链接:使用链表 ,在key编码之后的value上面,做一个链表
	//线性探查: 判断当前key是否存在元素,是则找index+1去存放当前元素,需要存放key-value