HashMapとLinkedHashMapの話

こんばんは。
明日でお仕事終わりです。

さて、見出しのとおりHashMapとLinkedHashMapの話。

HashMapってのはコレクションと呼ばれるクラスで、配列みたいに同じ型のクラスをまとめて保持しておくためのものです。
配列と違うのは、添え字が数字ではなくkeyと呼ばれるオブジェクトであることです。
文字列を使うことが多いですが、文字列のListなんかも使えます。
そして、keyに対応付けられたvalue=値を持っています。

詳しくはリファレンスをば。
HashMap - Java(tm) Platform Standard Edition 8

じゃあ、LinkedHashMapとは何かというと。
HashMapクラスを継承したコレクションクラスで、ざっくり言うとMapにputした順序を保持しています。

HashMapもLinkedHashMapも、keyの一覧を返すkeySet()というメソッドとvalueの一覧を返すvalue()というメソッドを持っています。
これを実行した場合、HashMapはputした順に出てくるとは限りませんが、LinkedHashMapはputした順に出てくることを保証しています。
LinkedHashMapってものを知らなくて、HashMapにインデックスも保持させて実装するところだった。スマートじゃないぜ。

というわけでひとつ知識が増えた話でした。
それでは、短いですが今回はこの辺りで。


続きを読む

JPAEntityについてのメモの話

とっても手短にJPAEntityのメモ。

Oracle DBとJavaでデータのやり取りをするために使うよ。
詳しくはOracle Containers for J2EE Enterprise JavaBeans開発者ガイド JPAエンティティとは

JavaBeansを作ったら、

・@Entityを設定
・どれか1つのメンバ変数に@Idを設定
・@Columnで名前がつけられる。これはDBのSELECT文で取ってくるデータの項目名と紐づく
詳しくはOracle Containers for J2EE Enterprise JavaBeans開発者ガイド 6 JPAエンティティの実装

それでは、短いですが今回はこの当たりで。


続きを読む

equals()を使ったオブジェクトの等価判定の話

先日してたshallowコピーとdeepコピーの話の関連メモ。

オブジェクトの等価判定を行う場合は、equals()関数を使用します。
デフォルトで用意されているequals()関数は、上の話のshallowコピーのように、参照が同じかどうかで等価判定をしてしまうようです。

なので、新しくクラスを作ってそのインスタンスを等価判定したい場合は、deepコピーの場合のようにequals()関数をオーバーライド(関数の上書き)する必要があります。
オーバーロードとオーバーライドの違いがだんだん身についてきた今日この頃。


equals()関数をオーバーライドするときの比較手順

1)オブジェクトのnull判定(nullの場合、戻り値はfalse)

2)オブジェクトの型が等しいか判定(等しくない場合、戻り値はfalse)
  ※オブジェクトが基本データ型だった場合はコンパイルエラー?要検証

3)各メンバ変数の比較(どれか一つでも値が異なる場合はfalse)

という感じ。
もちろん、3番のメンバ変数にオブジェクト型の変数が含まれる場合はその変数に対してもequals()のオーバーライドを行う必要があります。


というわけで、短いですが今回はこの辺りで。


続きを読む

Java shallowコピーとdeepコピー

メモ書き程度

Javaのオブジェクトのコピーにはshallow(浅い)コピーとdeep(深い)コピーの2種類がある。

shallowコピーの場合、オブジェクトの中のメンバ変数は参照渡しでコピーされる。
objectクラスが定義しているobject.copy()はこのshallowコピーに当たる。
もとのオブジェクトと切り離されたまったく新しい複製をつくりたい場合は、自分でdeepコピー用のメソッドを定義する必要がある。
オブジェクトがメンバ変数にオブジェクトを持つ場合は、そのオブジェクトのdeepコピーも作成する必要がある。

短いですが、今回はこの辺りで。


続きを読む