緒論
哈希表特點: 存儲鍵值對的數據結構,哈希表內部是使用一個hash函數把傳入的鍵轉換成一串數字,而這串數字將作爲鍵值對實際的key,通過這個key查詢對應的value非常快。
哈希表方法:
- add:添加一組鍵值對。
- remove:刪除一組鍵值對。
- lookup:查找一個鍵對應的值。
正文
<!DOCTYPE html>
<div lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>index</title>
<script src="js/jquery-2.2.4.min.js"></script>
<style>
</style>
</head>
<body>
</body>
<script>
$(document).ready(function () {
var hashTable = new myHashTable();
hashTable.add(1, 10);
hashTable.add(2, 20);
hashTable.add(3, 30);
hashTable.add(4, 40);
hashTable.add(2, 25);
hashTable.add(null, 250);
hashTable.add(undefined, 251);
console.log('內容:' + hashTable.show());
hashTable.remove(3);
console.log('內容:' + hashTable.show());
console.log('value:' + hashTable.lookup(2));
console.log('value:' + hashTable.lookup(3));
});
function hash(str, max) {
var hash = 0;
var string = new String(str);
for (var i = 0; i < string.length; i++) {
hash += string.charCodeAt(i);
}
return hash % max;
}
function myHashTable() {
var arr = [];
var MAX = 4;
// 添加一組鍵值對
this.add = function(k, v) {
if (k === null || k === undefined) {
return;
}
var index = hash(k, MAX);
if (arr[index] === undefined) {
arr[index] = [[k, v]];
} else {
var b = !!0;
for (var i = 0; i < arr[index].length; i++) {
if (arr[index][i][0] === k) {
arr[index][i][1] = v;
b = !0;
}
}
if (!b) {
arr[index].push([k, v]);
}
}
};
// 刪除一組鍵值對
this.remove = function(k) {
var index = hash(k, MAX);
if (arr[index].length === 1 && arr[index][0][0] === k) {
delete arr[index];
} else {
for (var i = 0; i < arr[index].length; i++) {
if (arr[index][i][0] === k) {
delete arr[index][i];
}
}
}
};
// 查找一個鍵對應的值
this.lookup = function(k) {
var index = hash(k, MAX);
if (arr[index] === undefined) {
return undefined;
} else {
for (var i = 0; i < arr[index].length; i++) {
if (arr[index][i][0] === k) {
return arr[index][i][1];
}
}
}
};
// 展示
this.show = function() {
return arr;
};
}
</script>
</div>
結果
(若有什麼錯誤,請留言指正,3Q)