Benutzerdefiniertes HashMap-Problem mit veränderbarer Größe in JavaScript,JavaScript

Javascript-Forum
Anonymous
 Benutzerdefiniertes HashMap-Problem mit veränderbarer Größe in JavaScript,

Post by Anonymous »

Ich habe daran gearbeitet: https://www.theodinproject.com/lessons/ ... pt-hashmap
Aber in letzter Zeit fällt es mir schwer, mit der Implementierung einer in der Größe veränderbaren Hash-Map voranzukommen.
Bevor die Größe der HashMap geändert wird, funktioniert alles wie beabsichtigt, aber nach der Größenänderung (wenn die Schlüsselwertpaare 12–14 hinzugefügt werden) und dem erneuten Aufwärmen ist der gelöschte Schlüssel2 wieder vorhanden die HashMap.

Code: Select all

class ResizableHashMap {
constructor(initialCapacity = 16, loadFactor = 0.75) {
this.buckets = new Array(initialCapacity).fill(null).map(() => []);
this.size = 0;
this.loadFactor = loadFactor;
}

hash(key) {
let hashCode = 0;
for (let char of key.toString()) {
hashCode += char.charCodeAt(0);
}
return hashCode % this.buckets.length;
}

set(key, value) {
if ((this.size + 1) / this.buckets.length > this.loadFactor) {
this.resize();
}
const index = this.hash(key);
const bucket = this.buckets[index];

for (let pair of bucket) {
if (pair[0] === key) {
pair[1] = value;
return;
}
}
bucket.push([key, value]);
this.size++;
}

resize() {
const newCapacity = this.buckets.length * 2;
const newBuckets = new Array(newCapacity).fill(null).map(() => []);

for (let bucket of this.buckets) {
for (let [key, value] of bucket) {
const index = this.hash(key) % newCapacity;
newBuckets[index].push([key, value]);
}
}
this.buckets = newBuckets;
}

// Delete key-value pair
delete(key) {
const index = this.hash(key);
const bucket = this.buckets[index];

for (let i = 0; i < bucket.length; i++) {
if (bucket[i][0] === key) {
bucket.splice(i, 1);
this.size--;
return true;
}
}
return false;
}
}

// Usage Example
const resizableHashMap = new ResizableHashMap();
resizableHashMap.set("key1", "value1");
resizableHashMap.set("key2", "value2");
resizableHashMap.set("key3", "value3");
resizableHashMap.set("key4", "value4");
resizableHashMap.set("key5", "value5");
resizableHashMap.set("key6", "value6");
resizableHashMap.set("key7", "value7");
resizableHashMap.set("key8", "value8");
resizableHashMap.set("key9", "value9");
resizableHashMap.set("key10", "value10");
resizableHashMap.set("key11", "value11");

// if these lines are commented out, it works as intended
resizableHashMap.set("key12", "value12");
resizableHashMap.set("key13", "value13");
resizableHashMap.set("key14", "value14");

resizableHashMap.set("key1", "updatedValue1");
// console.log(resizableHashMap);
resizableHashMap.delete("key2");
// console.log(resizableHashMap);
console.log(resizableHashMap.size);
// Output: 15, but should be 13 (added 14 keys and deleted 1)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post