JavaScriptでハッシュテーブルから要素を削除する方法
ハッシュテーブルから要素を削除するには、該当するキーを探し出し、配列からその場で要素を取り除ける splice メソッドを呼び出すだけで実現できます。
削除処理は以下の手順で行われます。
hash関数を使って、キーからハッシュ値(バケットのインデックス)を計算します。- 該当するバケット内のチェーン(連結されたエントリのリスト)を順番に走査します。
- 同じキーを持つ要素が見つかったら、
splice(i, 1)を呼び出してその位置の要素を1つ削除し、trueを返します。 - 見つからなかった場合は、何も削除せずに
falseを返します。
実装例
それでは、実際のコードを見てみましょう。
remove(key) {
let hashCode = this.hash(key);
for (let i = 0; i < this.container[hashCode].length; i++) {
// チェーンの中から該当する要素を探す
if (this.container[hashCode][i].key === key) {
this.container[hashCode].splice(i, 1);
return true
}
}
return false;
}このメソッドは、削除が成功したかどうかを真偽値(true/false)で返すため、呼び出し側で結果を確認できます。次のように動作をテストしてみましょう。
テストコード
let ht = new HashTable(); ht.put(10, 94); ht.put(20, 72); ht.put(30, 1); ht.put(21, 6); ht.put(15, 21); ht.put(32, 34); console.log(ht.get(20)); console.log(ht.remove(20)); console.log(ht.get(20)); console.log(ht.remove(20));
出力結果
上記のコードを実行すると、次のような出力が得られます。
{ key: 20, value: 72 }
true
undefined
false結果の解説
最初の get(20) の呼び出しでは、キー 20 に対応する値 72 が取得できています。続く remove(20) では要素が見つかり、正常に削除されたため true が返されます。
その後にもう一度 get(20) を呼び出すと、要素はすでに削除されているため undefined が返ります。そして最後の remove(20) では、キー 20 はもう存在しないため、false が返されるという流れです。
このように、削除メソッドが真偽値を返す設計にしておけば、呼び出し元は削除の成否を簡単に判断できるため、実用的なハッシュテーブルを実装する上で重要なポイントになります。
-
JavaScriptでリンクリストから要素を削除する方法
リンクリストから要素を削除する基本の考え方 リンクリスト(連結リスト)から要素を削除する処理は非常にシンプルです。削除したいノードへの参照を失う(参照を切り離す)だけで実現できます。ただし、削除する位置によって処理が異なるため、次の3つのケースを考慮する必要があります。 ケース1:先頭(ヘッド)から削除する場合 先頭の要素を削除する場合は、head = head.next と代入するだけでOKです。これにより最初のノードへの参照が失われ、headは2番目のノードを指すようになります。 ケース2:末尾(テール)から削除する場合 末尾の要素を削除する場合は、最後から2番目のノードの node.ne
-
JavaScriptのハッシュテーブル:データ構造の基礎と実装方法を徹底解説
ハッシュテーブル(Hash Table)は、データを連想形式で格納するデータ構造です。ハッシュテーブルでは、データは配列形式で保持され、それぞれのデータ値に固有のインデックス値が割り当てられます。目的のデータのインデックスさえ分かれば、データへのアクセスは非常に高速に行えます。そのため、ハッシュテーブルはデータサイズの大小にかかわらず、挿入操作も検索操作も非常に高速に実行できるデータ構造となっています。ハッシュテーブルは配列を記憶領域として利用し、要素を挿入または検索すべきインデックスを生成するために「ハッシュ」という技法を用います。ハッシュ化(Hashing)とはハッシュ化とは、キー値の範囲