ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Objectの等価・ハッシュ

2007-02-28 23:27:55 | PG(Java)

Objectクラスについてメモ。
というか、等価(equals)ハッシュ(hashCode)についてのメモかな。
というか、HashMapについての文量が一番多いかもしれない(爆)

equals()を実装したら、hashCode()も実装しなきゃいけないなんて知らなかったな~。
その理由はハッシュテーブルで使うから、ということらしい。
ついでなので、以前から疑問だったHashMapの実装について調べてみた。

疑問というのは、ハッシュ値はその定義上、異なるオブジェクトであっても等しいハッシュ値が存在し得るということ。そういうハッシュ値をそのまま配列のインデックスとかに使えば、異なるオブジェクトが等しいとして扱われてしまう。
その辺り大丈夫だよな~?と思っていたが、確かに大丈夫だった。
ハッシュコードは、テーブルの最初のインデックス算出の他に、キー値が不一致であることの確認に使われている(定義からすれば当然だったね)。そして、最終的にはequalsでキー値が等しいことを確認している。
だからequals()とhashCode()をペアで定義しないといけないわけだ。
…ハッシュテーブルとかハッシュマップを使うならば(爆)


java6の例外が便利に

2007-02-28 21:37:14 | PG(Java)

java6で変わった点として、OutOfMemroyErrorでスタックトレースが表示されるようになったことがあちこちに書かれていた。
確かにそれは便利。(というか、なんで今まで出なかったんだろう?)

もうひとつ、ClassCastExceptionのメッセージ出力も変わっていた(嬉)
キャスト元とキャスト先の両方のクラス名が表示されるようになった。
今まで(jre1.4まで)は、ClassCastExceptionをキャッチして変換元のオブジェクトのgetClass()を表示したり、無駄な事をしてたもんなぁ(苦笑)

他の例外にも、こういう変更はあるのかな??


画像の透明色

2007-02-26 08:03:44 | PG(Java)

BufferedImageで透明色を描く方法をメモ。

出来てしまえば単純な話だった(苦笑)
「アルファの指定」という単語は、知ってる人には分かるんだろうけど、知らない人間には意味不明。(アルファブレンドとかいう言葉は聞き覚えがあるけど、それと関係あるのかな?)

ちょっと不安な点。
ColorからRGB値とかいう値に変換する方法は、このメモの通りで合ってるんだろうか?
試したら使えたけど、BufferedImageのピクセルのバイト数によって変わったりしないだろーな…?


Swing関連自作クラス(UndoManager)

2007-02-25 22:39:51 | PG(Java)

Swing関連の自作クラスのページを作ってみた。

DragWindowは、以前書いたページからこちらへ移転。

TextUndoManagerは、UndoManagerを拡張したクラス。
テキストエディター(JTextComponent)系のクラスでは デフォルトでUNDO/REDO機能が有効になっていないけど、UndoManagerを使うとけっこう簡単に実現できる。
これがデフォルトになっていないのは、メニューを実現する方法がアプリケーションによって違うからなんだろうな。

ComponentUtilはおまけのようなもの。
でも文字列のサイズに合わせてコンポーネントのサイズを決める方法はどこかにメモしときたいと思ってたので、いいかなー。


javadocのlink

2007-02-25 22:20:02 | PG(Java)

antのjavadocタスクのボディー部にlinkというタグが指定できる。
これでウェブ上のJavaのAPIのページを指定すると、そこにあるクラス・メソッドへのリンクを作成してくれる。
自作のjavadocがより便利になる(嬉)と思うんだけど、その分だけ容量は増えてるんだろうな(汗)

…本当は継承したメソッドのjavadocコメントがそのまま出ればいいな~と思ったんだけど、よく考えたらリンク先はjavaソースじゃなくてjavadoc(HTML)だから、その文章を持ってくるなんてのは難しいか(苦笑)
javaソースのsrc.zipが指定できればいいんだな?! でもそんな機能は無いだろうな^^;