手書きのHashMapのコレクション

序文

  1. このセットは、単一のコンテナ要素に格納されていないため、Javaのコレクションでは、地図には、特別なセットですが、キーと値のペアの一つ。HashMapのは、プロジェクトの開発に基づいて実現マップインターフェース・ハッシュ・テーブルで、このコレクションは、この論文を分析しようとするのHashMapの基本原理である、非常に広いの使用です。

HashMapの特長

  1. MapインタフェースのHashMapハッシュテーブルをベースにしています。
  2. エントリHashMapの下の配列とリンクリストの実装を使用しています。
  3. キーと値を使用してHashMapのキーだけヌルが、1つであってよく、格納され、(新しい値が古い値を上書きする場合繰り返す)重複キーを許可していません。
  4. HashMapのは、スレッドセーフです。そして、HashMapのへのトラバーサルの順序が矛盾する可能性があります。
  5. 格納データは、ハッシュ値計算キーによって決定HashMapの格納された位置に来ます。

私たちは、コードにあまり話をしませんでした

  

  1  パッケージハッシュマップ;
   2  
  。3  パブリック クラス MyHashMap <K、V> {
   4。 
  5。     プライベートエントリ<K、V> []テーブルと、記憶されたデータが真のクラスの内部クラス//ハッシュマップエントリがある
   。6      プライベート 静的 最終容量の整数。8 =; // ハッシュマップの元の長さ
  7。     プライベート int型のサイズ、要素の集合数//
   。8  
  。9      // デポジットまたは変更要素
10      公共 ボイドPUT(K K、V V){
 11。       //これは、第1の時間店であれば、初期化アレイ
12は、         IF(表== NULL ){
 13であります             インフレート();
 14          }
 15          // エントリ保存
 16          //はkの値に応じてint型のハッシュコードを返し
17。         INTハッシュコード= ハッシュ(K);
 18れる         // 配列のインデックスでこのハッシュコードによれば、指標は0〜 table.lengthはなく、配列の境界の間の数
19          のintインデックス= のindexOf(ハッシュコード);
 20          // Kに配置された場合には既に、既存の要素、構成要素に割り当てられたVパラメータが割り当てパラメータkが存在します、更新された目的を達成する
21ことである         ブール =フラグにtrueに22である         ため(;エントリ=!エントリ<K、V>テーブルエントリ= [インデックス] NULLエントリ=; {entry.next)
          //は同じKがあるか否かを判断
23である 場合(entry.key.equals(K)){ 24 = entry.key K; 25 entry.value = V; 26で フラグ=でfalseに; 27 } 28 } 29 // Kがもう存在しない場合と同じ方法で追加行わない 30 IFを(フラグに){ 31である (kは、V、指数)addEntry; 32 } 33は 34である } 35 36 // 取る 37 [ パブリックVのGET(KのK){ 38は、 // kの値に応じては、ハッシュコードを返し 39 INTを=ハッシュコードハッシュ(K); 40 // このハッシュコードにインデックスを返しアレイ 41は、 INT =指数のindexOf(ハッシュコード) 42がある // 表に従って計算添字インデックス配列は、Kを通過し、次いで、このサイクルは指数で決定されますノーリターンヌルが存在しない場合に存在または不在kの、戻り値のエントリがある場合、 43である ため(;表[インデックス] =!エントリ<K、V>テーブルエントリ= [インデックス] NULL ;エントリ= entry.next) { 44は、 IF (entry.key.equals(K)){ 45 リターンentry.value; 46である } 47 } 48 49 戻り NULL ; 50 } 51れます   次の要素(彼の属性)として//テーブル位置に方法、新しく追加されたエントリ素子アレイインデックスを追加、要素インデックスの元の位置は、新たな要素を追加し 52である プライベート ボイド addEntry(K K、V V、INT インデックス){ 53は、 エントリ<K、V> = newentry 新しい新規エントリ<> (K、V、表[インデックス]); 54である テーブル[インデックス] = newentry; 55 // 配列の各要素に格納された要素の数をインクリメントします 56は ++サイズ; 57である 58 } 59 60 専用 のintのindexOf(int型のハッシュコード){ 61は、       //は電流配列境界エラーことを確実にするために、配列の長さによって得られたモジュロハッシュコード値 62がなく リターンハッシュコードの%table.length; 63である } 64   //戻り値k値ハッシュコード 65 専用 INT ハッシュ(KのK){ 66 67 戻りk.hashCode(); 68 } 69 //初期化テーブルアレイ 70 プライベート ボイドインフレート(){ 71である テーブルが= 新しい新規[容量]エントリー; 72 73である } 74の   エンティティ//内部クラス、格納されたデータ 75 クラスエントリ<K、V> { 76 プライベートKキー、 77 プライベートV値; 78 プライベートエントリ<K、V>次; 79 80 公共のエントリ(Kキー、V値){ 81 82 この .KEY = キー。 83 この .VALUE = 値。 84 } 85 86 公共のエントリ(Kキー、V値、エントリ<K、V> 次){ 87 88 この .KEY = キー。 89 この .VALUE = 値。 90 この .next = 次回。 91 } 100 101 } 102   //测试 103 パブリック スタティック ボイドメイン(文字列[]引数){ 104 MyHashMap <文字列、文字列> myHashMap = 新しい MyHashMap <> (); 105 myHashMap.put( "1"、 "1P" )。 106 myHashMap.put( "1"、 "1PP" )。 107 myHashMap.put( "2"、 "2P" )。 108 のSystem.out.println(myHashMap.get( "1" )); // 1PP、アウト()方法即是存放又是修改 109 のSystem.out.println(myHashMap.size); // 2 110 } 111 112 }

 

おすすめ

転載: www.cnblogs.com/MrliBlog/p/11005088.html