what is java hashtable hashtable implementation example
このチュートリアルでは、Java HashTable、コンストラクター、およびHashtableクラスのメソッド、実装とHashtableとHashmapについて説明します。
HashTableとは何ですか?
Javaのハッシュテーブルは、リストである要素の配列です。これらの各リストは、 バケツ 。
キーを値にマップします。 Javaでは、ハッシュテーブルは「HashTable」クラスによって実装されます。このクラスはマップインターフェイスを実装し、ディクショナリクラスを継承します。
=> ここで完璧なJavaトレーニングガイドをチェックしてください。
JavaでのHashtableのユニークな特徴のいくつかは次のとおりです。
- これは、要素としてリストまたはバケットを含む配列です。
- それはユニークな要素を持っています。
- ハッシュテーブルにnullキーまたはnull値はありません。
- ハッシュマップに似ていますが、同期されています。
学習内容:
JavaのHashTableクラス
Javaでは、このクラスはjava.utilパッケージのメンバーです。したがって、HashTableクラスの機能を含めるには、プログラムに次のステートメントのいずれかを含める必要があります。
java.utilをインポートします。*;
または
インポートjava.util.HashTable;
java.util.HashTableクラスの一般的なクラス宣言を以下に示します。
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
ここに、
- K => HashTableのキーのタイプ
- V =>マップされた値のタイプ
HashTableクラスAPIは、クラスオブジェクトを構築するために使用されるコンストラクターと、HashTableクラスのスムーズな機能をもたらすクラスの一部であるさまざまな操作またはメソッドで構成されます。
HashTableクラスのコンストラクター
コンストラクタープロトタイプ | 説明 | |
---|---|---|
セットする | セットする | マップに含まれるマッピングのセットビューを返します。 |
ハッシュ表 () | デフォルトコンストラクタ:初期のデフォルト容量と負荷係数を使用してHashTableクラスオブジェクトを作成します。 | |
ハッシュテーブル(int容量) | 指定された初期容量でハッシュテーブルを作成します。 | |
ハッシュテーブル(int容量、float loadFactor) | 初期容量=容量および負荷係数= loadFactorでハッシュテーブルオブジェクトを作成します。 | |
ハッシュテーブル(マップt) | 引数として指定された指定のマップから新しいhashTableを作成します。 |
HashTableクラスのメソッド
方法 | メソッドプロトタイプ | 説明 |
---|---|---|
晴れ | ボイドクリア() | 値をリセットしてHashTableをクリアします。 |
クローン | オブジェクトクローン() | HashTableオブジェクトの浅いコピーを作成し、それを返します。 |
計算する | V計算(Kキー、BiFunction remappingFunction) | 再マッピング関数を使用して、指定されたキーと値の間のマッピングを計算します。 |
computeIfAbsent | V computeIfAbsent(Kキー、関数mappingFunction) | 指定されたキーが指定された値にまだ関連付けられていない場合、再マッピング関数を使用して、指定されたキーと値の間のマッピングを計算します。 |
computeIfPresent | V computeIfPresent(K key、BiFunction remappingFunction) | 指定されたキーが存在する場合、再マッピング関数を使用して、指定されたキーと値の間の新しいマッピングが計算されます。 |
要素 | 列挙型要素() | ハッシュテーブルの値の列挙を返します。 |
等しい | ブール値が等しい(オブジェクトo) | 指定されたオブジェクトをHashTableと比較します。 |
forEach | void forEach(BiConsumerアクション) | 指定されたアクションは、すべての要素が使い果たされるまで、HashTable要素ごとに実行されます。 |
getOrDefault | V getOrDefault(オブジェクトキー、V defaultValue) | 指定されたキーがマップされている値を返します。マップにキーのマッピングが含まれていない場合はdefaultValueを返します。 |
ハッシュコード | int hashCode() | HashTableのハッシュコードを返します。 |
キー | 列挙キー() | HashTableのキーを列挙型として返します。 |
keySet | キーセットを設定する() | HashTableのキーセット(セットとしてのキー)を返します。 |
行く | Vマージ(Kキー、V値、BiFunction remappingFunction) | キーがまだ存在しないかnullの場合は、再マッピング機能を使用して、指定されたキーをnull以外の値でマップします。 |
置く | V put(Kキー、V値) | HashTableに新しいキーと値のペアを挿入します。 |
putAll | void putAll(Map t)) | 指定されたマップのキーと値のペアをHashTableに配置またはコピーします。 |
putIfAbsent | V putIfAbsent(Kキー、V値) | キーがまだ存在しないか、nullに関連付けられていない場合は、指定されたキーをnull値に関連付けます。 |
削除する | boolean remove(オブジェクトキー、オブジェクト値) | 指定されたキーと値のペアをHashTableから削除します。 |
交換 | V置換(Kキー、V値) | 指定されたキーの値を指定された値に置き換えます。 |
交換 | ブール置換(Kキー、V oldValue、V newValue) | 指定されたキーの古い値を新しい値に置き換えます。 |
replaceAll | void replaceAll(BiFunction関数) | HashTableのすべてのエントリは、指定された関数の評価から取得された値に置き換えられます。 |
toString | 文字列toString() | HashTableオブジェクトをその文字列表現に変換します。 |
値 | コレクション値() | HashTableの値をコレクションとして返します。 |
含まれています | boolean contains(オブジェクト値) | 指定された値がHashTableに存在するかどうかを確認します。 presentの場合はtrueを返し、そうでない場合はfalseを返します。 |
値が含まれています | ブールcontainsValue(オブジェクト値) | HashTableに指定された値と等しい値があるかどうかを確認し、trueを返します。 |
containsKey | ブールcontainsKey(オブジェクトキー) | HashTableに指定されたキーと等しいキーがあるかどうかを確認し、ある場合はtrueを返します。 |
isEmpty | ブールisEmpty() | 指定されたHashTableが空かどうかを確認し、空の場合はtrueを返します。 |
再ハッシュ | 保護されたボイドリハッシュ() | これは、ハッシュテーブルのサイズを増やし、そのすべてのキーを再ハッシュするために使用されます。 |
取得する | V get(オブジェクトキー) | 指定されたキーの値を取得します。 |
削除する | V削除(オブジェクトキー) | 指定されたキーと値を削除し、この値を返します。 |
サイズ | intサイズ() | HashTableに存在する要素のサイズまたは数を返します。 |
HashTableの実装
以下に示すのは、Javaでのクラスの実装です。ここでは、クラスが提供するすべての重要なメソッドを示しました。
働くトップゲーム会社
import java.util.*; class Main{ public static void main(String args()){ //create a Hashtable and initiliaze it Hashtable hash_tab=new Hashtable (); hash_tab.put(100,'Red'); hash_tab.put(101,'Green'); hash_tab.put(104,'Blue'); hash_tab.put(102,'Orange'); hash_tab.put(103,'Brown'); //obtain entrySet for the Hashtable and print the elments System.out.println('The contents of Hashtable:'); for(Map.Entry m:hash_tab.entrySet()){ System.out.println(m.getKey()+' : '+m.getValue()); } //getOrDefault operation => get the value at given key or output default message System.out.println('Hashtable Value at 101: ' + hash_tab.getOrDefault(101, 'Value Not Found')); System.out.println('Hashtable Value at 105: ' +hash_tab.getOrDefault(105, 'Value Not Found')); //remove operation => delete value at given key hash_tab.remove(102); System.out.println('After remove(102), the Hash Table: '+ hash_tab); //putIfAbsent operation=>update the key-value pair in table if absent hash_tab.putIfAbsent(102,'Orange'); System.out.println('Updated Hash Table: '+hash_tab); } }
出力:
ハッシュテーブルの内容:
104:青
103:ブラウン
102:オレンジ
101:緑
100:ネットワーク
101でのハッシュテーブル値:緑
105のハッシュテーブル値:値が見つかりません
remove(102)の後、ハッシュテーブル:{104 =青、103 =茶色、101 =緑、100 =赤}
更新されたハッシュテーブル:{104 =青、103 =茶色、102 =オレンジ、101 =緑、100 =赤}
HashTableJavaの例
このプログラムでは、キーをアカウント所有者名として、それぞれのアカウント残高を値としてハッシュテーブルを定義します。まず、列挙型としてHashTableからキーを取得します。次に、この列挙を使用して、HashTableからキーと値のペアを出力します。
その後、いずれかの保有者の口座残高を更新し、更新された金額を印刷します。
以下に示すプログラムは、この実装を示しています。
import java.util.*; public class Main { public static void main(String args()) { // Create a Hashtable of account balance Hashtable acc_balance = new Hashtable(); Enumeration person_names; String name_str; double balance; //initialize the Hashtable acc_balance.put('Lily', new Double(4367.34)); acc_balance.put('Ben', new Double(95.43)); acc_balance.put('Lacy', new Double(1200.00)); acc_balance.put('Dillon', new Double(499.22)); acc_balance.put('James', new Double(78.48)); // retrieve the keys of the Hashtable person_names = acc_balance.keys(); System.out.println('The account balance Hashtable:'); System.out.println(' KEY VALUE '); //print the contents of Hashtable while(person_names.hasMoreElements()) { name_str = (String) person_names.nextElement(); System.out.println(' ' + name_str + ' ' + acc_balance.get(name_str)); } System.out.println(); // Update Ben's Account by adding 1000 to it. balance = ((Double)acc_balance.get('Ben')).doubleValue(); acc_balance.put('Ben', new Double(balance + 1000)); //print the contents of updated account System.out.println('Ben's new Account balance: ' + acc_balance.get('Ben')); } }
出力:
アカウント残高ハッシュテーブル:
キーバリュー
ジェームズ78.48
ベン95.43
ディロン499.22
リリー4367.34
レイシー1200.0
ベンの新しい口座残高:1095.43
Javaでオブジェクトの配列を初期化する方法
ハッシュテーブルとハッシュマップ
ハッシュ表 | HashMap |
---|---|
HashTableの実行が遅い。 | HashMapはより高速です。 |
辞書クラスを継承します。 | AbstractMapクラスを継承します。 |
レガシークラスです。 | JDK1.2で導入されたHashMapクラス |
同期され、スレッドセーフです。 | 同期されておらず、スレッドセーフではありません。 |
内部で同期され、元に戻すことはできません。 | これは、Collections.synchronizedMapメソッドを使用して同期できます。 |
nullキー/値は許可されていません。 | nullキーと複数のnull値を許可します。 |
EnumeratorとIteratorを使用してトラバースできます。 | Iteratorを使用してのみトラバースできます。 |
よくある質問
Q#1)JavaのHashtableとは何ですか?
回答: これは、「ディクショナリ」クラスを継承し、キーと値のペアを格納するレガシークラスです。
Q#2) なぜハッシュテーブルが使用されるのですか?
回答: キーと値のペアを格納するために使用されます。したがって、キーと値のペアを表形式で格納する必要がある場合は、HashTableを使用します。次に、バケットを使用して同じキーの複数の値を格納できます。 HashTablesではデータの取得が効率的です。
Q#3)Javaでハッシュテーブルを作成するにはどうすればよいですか?
回答: java.util.HashTableクラスのオブジェクトをインスタンス化することで作成できます。
HashTable hashTable = new HashTable();
上記のステートメントは、String型のキーと値を持つ「hashTable」という名前のHashTableを作成します。
Q#4) ハッシュテーブルはスレッドセーフですか?
回答: はい、スレッドセーフです。スレッドの安全性が必要ない場合は、HashMapを選択できます。
Q#5) 例を挙げて、HashtableはJavaの内部でどのように機能しますか?
回答: 内部的には、バケットと呼ばれる構造にキーと値のペアを格納します。バケットの位置は、キーのhashCodeによって決定されます。ハッシュ関数は、キーのhashCodeを使用してバケットの場所を取得します。
結論
HashTableは、キーと値のペアの形式で格納されたデータで構成されます。キーまたは値をnullにすることはできません。 Javaでは、HashTableクラスを使用して実装されます。
Java言語でのHashTableの実装とともに、HashTableクラスによって提供されるコンストラクターとメソッドを見てきました。
今後のチュートリアルでは、HashMapコレクションについて説明します。
=> 独占的なJavaトレーニングチュートリアルシリーズについては、こちらをご覧ください。