集合フレームワーク(3)


HashMapとHashTable


HashTableとHashMapの関係はVectorとArrayListの関係と同じで、HashTableではなく新しいバージョンのHashMapを使用することをお勧めします.
HashMapはMapを実現しているので、Mapの特徴、キー、値を組み合わせてデータとして格納するのが特徴です.また,ハッシュを用いたため,大量のデータを検索する上で優れた性能を示した.
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable{

    transient Entry[] table;
    
    static class Entry implements Map.Entry {
    	final Object key;
        object key;
    }
    
}
HashMapはEntryという名前の内部クラスを定義し、Entryタイプの配置を再宣言します.キー(key)と値(value)は単独の値ではなく相互に関連する値であるため、各配列として宣言するよりもクラスとして定義し、配列として処理する方がデータ整合性の観点から望ましい.
HashMapは、キーと値をそれぞれオブジェクトタイプとして格納します.すなわち(Object,Object)として格納されるため、任意のオブジェクトを格納することができるが、鍵は通常Stringを使用して大文字または小文字を統一的に使用する.
鍵セット内の鍵は一意でなければなりません.
値キーとは異なり、データの重複を許可します.
ex)限定範囲内の順序値の周波数は配列を利用し,非限定範囲内の空の順序値の周波数はHashMapを利用して求める.

ハッシュとハッシュ関数


ハッシュとは、ハッシュ関数(hash function)を用いてハッシュテーブルにデータを格納して検索する技術である.ハッシュ関数は、データが格納されている場所を示します.したがって、大量のデータの中で必要なデータを迅速に見つけることができます.
ハッシュを実現する集合クラスには,HashSet,HashMapなどがある.

ハッシュで使用されるデータ構造は、次の配列とリンク・リストを組み合わせたものです.
格納するデータのキーをハッシュ関数に入れると、配列の要素が取得され、リンクリストに格納されます.
実生活を例にとると、ある看護師は、多くの患者のデータから希望する患者のデータを簡単に見つける方法があるかどうかを考え、身分証明書番号の一番前の生年を基準にデータを分類し、10個の引き出し(並べ)に分ける方法を考えた.例えば、71年生と72年生の70年生の患者のデータは、同じ引き出しに格納される.このように分類して保存すれば、患者の身分証明書番号で生まれた年代を簡単に計算することができ、どの引き出しの中で探すべきかを知ることができます.
ハッシュを実装する過程で最も重要なのは、上記の例で使用したハッシュ関数のアルゴリズムであり、所与の鍵(身分証明書番号)の最初の文字を抽出して整数を返すだけでよい.
実際,HashMapのようにハッシュを実現した集合クラスは,ハッシュ関数としてオブジェクトクラスで定義されたHashCode()を用いる.Objectクラスで定義されたhashCode()は、オブジェクトアドレスのアルゴリズムを使用してハッシュコードを生成するため、hashCode()をすべてのオブジェクトに対して呼び出す結果は、互いに唯一の良い方法である.
Stringクラスでは、オブジェクトから継承されたhashCode()を上書きすることで、文字列コンテンツのハッシュコードが生成されます.したがって、異なるStringインスタンスであっても、同じコンテンツの文字列を有する場合、hashCode()を呼び出すことによって同じハッシュコードを得ることができる.
HashSetと同様に、2つの異なるオブジェクトをequals()で比較した結果はtrueであり、HashCode()の戻り値は同じでなければ、同じオブジェクトと識別できません.HashMapでは、同じようにオブジェクトを区別し、既存のキーに値を保存すると、既存の値が新しい値で上書きされます.
したがって、新しいクラスを定義するときにeuqals()を再定義する必要がある場合、hashCode()も一緒に再定義し、2つのequals()結果がtrueのオブジェクトのハッシュコードhashCode()の結果値が常に同じになるようにする必要があります.そうでなければ、HashMapのようにハッシュが実装された集合クラスでは、equal()の呼び出し結果はtrueとなるが、ハッシュコードは他の2つのオブジェクトを識別して個別に保存する.

TreepMap


TreeMapは、鍵と値のペアのデータをバイナリ検索ツリーとして格納する.したがって、検索とソートに適した集合クラスです.
ほとんどの検索では、TreeMapよりもHashMapの方が優れているので、HashMapを使用するのが望ましい.ただし、検索範囲やソートが必要な場合はTreeMapを使用します!

整理する


各集合クラスには保証点があるので,実現原理と特徴を理解し,最適な状況の使用を選択することを学ぶ.

コレクションフィーチャーArrayListアレイに基づく.データの追加と削除に不利です.連続的な追加は削除速度が最も速いです.LinkedListコネクタグループは任意の要素にアクセスできます.データの追加と削除に役立ちます.任意の要因への近接性が悪い.HashMapアレイに接続された形式.追加、削除、検索、アクセスが優れています.検索は最高のパフォーマンスを示し、TreeMap接続ディスクです.ソートと検索(特に範囲検索)に最適です.検索性能はHashMap以下のStackVectorを継承し、QueLinkedListはQueueインタフェースを継承し、PropertiesHashTableを実現し、実施したHashSetHashMapを利用して実施したTreeSetTreeMapを利用してLinkedHashSetHashMapとHashSetの記憶順序保持機能を実現した
その間、「javaの定式」を参考にコレクションフレームを整理しました.
バックエンド開発者になるためにはSpringやJPAを学ぶことも大切ですが、最も基本的なJava言語を学ぶ必要があると思います.今後も『Javaの定式化』を参考に、表面的なjavaの知識しか知らないことを再確認する必要があります.