字典和散列表
- 集合忘朝、字典和散列表可以存儲(chǔ)不重復(fù)的值
- 集合以[值鞠值,值]的形式存儲(chǔ)元素,字典和散列表以[鍵单雾,值]的形式存儲(chǔ)
7.1 字典
// 創(chuàng)建一個(gè)字典
function Map() {
var items = {};
/*
set(key, val): 向字典中添加新元素
remove(key): 通過鍵值從字典中移除對(duì)應(yīng)的數(shù)據(jù)
has(key):如果鍵存在字典中返回true,否則false
get(key):通過鍵值查找特定的數(shù)值并返回
clear():將這個(gè)字典中的所有元素刪除
size():返回字典所包含的元素個(gè)數(shù)
keys():將字典中包含的所有鍵名以數(shù)組形式返回
values():將字典中包含的所有數(shù)值以數(shù)組形式返回
*/
// has(key)方法
this.has = function (key) {
return items.hasOwnProperty(keys);
};
// set(key, val)方法
this.set = function (key, val) {
items[key] = val;
};
// remove(key)方法
this.remove = function (key) {
if (this.has(key)) {
delete items[key];
return true;
}
return false;
};
// get(key)方法
this.get = function (key) {
return this.has(key) ? items[key] : undefined;
};
// values()方法
this.values = function () {
return Object.values(items);
};
// keys()方法
this.keys = function () {
return Object.keys(items);
};
// clear()方法
this.clear = function () {
items = {};
};
// size()方法
this.size = function () {
return Object.keys(items).length;
};
// getItems()方法
this.getItems = function () {
return items;
};
}
// 使用Map類
var m = new Map();
m.set('Gandalf', 'gmail@email.com');
m.set('John', 'john@gmail.com');
m.set('TFBoys', 'tfboys@#');
console.log(m.has('Gandalf')); // true
console.log(m.size());
console.log(m.keys());
console.log(m.values());
console.log(m.get('jay'));
m.remove("John");
console.log(m.keys());
console.log(m.values());
console.log(m.getItems());
7.2 散列表
散列算法的作用是盡可能快地在數(shù)據(jù)結(jié)構(gòu)里找到一個(gè)值
散列函數(shù)的作用是給定一個(gè)鍵值践啄,然后返回值在表中的位置
// 創(chuàng)建一個(gè)散列表
function HashTable() {
var table = [];
// 良好的散列函數(shù)
var hashPosCode = function (key) {
var hash = 5381;
for (var i = 0; i < key.length; i++) {
hash = hash * 33 + key.charCodeAt(i);
}
return hash % 1013;
};
// put方法浇雹,向散列表增加一項(xiàng)
this.put = function (key, val) {
var pos = hashPosCode(key);
table[pos] = val;
};
// remove方法沉御,根據(jù)鍵值刪除值
this.remove = function (key) {
table[hashPosCode(key)] = undefined;
};
// get方法屿讽,返回根據(jù)鍵值找到的值
this.get = function (key) {
return table[hashPosCode(key)];
};
this.print = function () {
for (var i = 0; i < table.length; i++) {
if (table[i] !== undefined) {
console.log(i + ':' + table[i]);
}
}
};
}
var hash = new HashTable();
hash.put('Gandalf', 'g@email.com');
hash.put('Sue', 'sue@#');
hash.put('Donnie', 'Donnie@fox.me');
hash.put('Ana', 'Ana@gmail.com');
hash.put('Jonathan', 'Jonathan@baidu.com');
hash.print();
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者