1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| class Hash_Table { constructor(size = 8) { this.data = [] this._count = 0 this._size = size }
_hash(str, num) { let hash = 0 str.split("").map((i) => { hash = (hash << 5) + i.charCodeAt(0) hash = (hash & hash) % num }) return hash }
insert(key, value) { let index = this._hash(key, this._size), modify = false, blank = this.data[index]
if (!blank) this.data[index] = blank = []
blank.map((i) => { if (i[0] === key) { i[1] === value modify = true } })
if (!modify) { blank.push([key, value]) this._count++
if (this._count > this.size * 0.75) { this.resize(this.size * 2) } } }
_resize(newSize) { let oldData = this.data
this._size = newSize this._count = 0 this.data = []
oldData.map((i) => { if (!i) return for (let j = 0; j < i.length; j++) { this.insert(i[j][0], i[j][1]) } }) }
remove(key) { let index = this._hash(key, this._size) let current = this.data[index]
if (!current) return null
current.map((i, index) => { if (i[0] === key) { current.splice(index, 1) this._count--
if (this._count < this._size * 0.25) { this._resize(this._size / 2) }
return i[1] } }) }
traverse(key) { let index = this._hash(key, this._size), current = this.data[index]
if (!current) return null
let result = current.filter((i) => i[0] == key)[0] return result === undefined ? null : result[1] }
traverseALl() { console.log(this.data) } }
var addressBook = new Hash_Table()
addressBook.insert("Wendy", "220-02-33") addressBook.insert("GilesYvette", "746-71-84") addressBook.insert("Pollitt", "374-34-48") addressBook.insert("AbeLinda", "040-17-82") addressBook.insert("StracheyPayne", "129-35-33") addressBook.insert("JonahIrene", "709-98-46") addressBook.insert("DorisAngela", "205-74-43") addressBook.insert("ThoreauTess", "946-62-95") addressBook.insert("HaggaiFanny", "147-68-09") addressBook.insert("KentCuritis", "095-94-11") addressBook.insert("CecilliaFrederica", "273-72-73") addressBook.insert("HazlittFranklin", "107-49-37") addressBook.remove("AbeLinda") addressBook.remove("Pollitt") addressBook.traverseALl() console.log(addressBook.traverse("CecilliaFrederica")) console.log(addressBook.traverse("Pollitt")) console.log(addressBook.traverse("HaggaiFanny")) console.log(addressBook.traverse("ThoreauTess")) console.log(addressBook.traverse("DorisAngela"))
|