Archive for 5月, 2005

連結リストについて驚いたこと。

火曜日, 5月 10th, 2005

 先日、Javaのコードを書いている際に、隣の席のFさんと話題になったことがあります。Java.util.iteratorクラスについてです。
まず、Bean(Cでいう構造体みたいなの?VBでいうユーザー定義名前みたいなの?)の中に値を入れ、それをいくつか挿入したArrayListを作成し、それを繰り返し処理していくというコードです。

JAVA:
  1. System.out.println(list); // ①listにはBeanがいくつか入っている
  2. Iterator iterator = list.iterator();
  3. while(iterator.hasNext()) {
  4. Bean bean = (Bean)iterator.next(); // これでlistの中の一つのbeanが取れる
  5. bean.setXXX("abcdefg"); // beanの中の変数の値を変える
  6. }
  7. System.out.println(list); // ②

①の時点でリストをシスアウトしたものと②でシスアウトしたものが違って出力されました。私は今まで、while文のなかで取得したbeanを変更しても、元のlistは変わらないと思っていたのですが、iterator反復子で処理した内容は元のリストにも反映されました。今まではリストをもう一つ作ってbeanを追加しなおしてから使っていたので影響は無かったのですが、こういう知らないで使っていた、という事実にびっくりしました。ResultSetと同じようにiterator.next()をすると、カーソルを移動させるみたいです。
whileの中で処理をしている途中でlistの値を変更すると、ConcurrentModificationExceptionという例外が起こります。なので、Iteratorオブジェクトを使った繰り返しはsynchronizedブロックの中で行うと良い、ということです。実際、そこまでやってるコードは見たこと無いですが…。

JAVA:
  1. synchronized(list) {
  2.     Iterator iterator = list.iterator();
  3.     while(iterator.hasNext()) {
  4.         Bean bean = (Bean)iterator.next();
  5.         bean.setXXX("abcdefg");
  6.     }
  7. }

この事を調べるのに Javaプログラマのためのアルゴリズムとデータ構造 という本を読みました。知らなくてもコードは書けるのですが、知らないことがいっぱいあるのに書いてるのが怖くなりました。



母校訪問

金曜日, 5月 6th, 2005

ボウ父作  友達のお父さんから庭にすずなりになってたさくらんぼ(桜桃)を頂きました。しかも食べきれないくらい。ありがとうございました。
 桜桃はセイヨウミザクラという桜の実です。ほんとに桜の木になるのだなぁ、と感心しました。
 あと、熊本産の苺もたくさん頂き、ビタミン摂取しまくっています。贅沢。一人暮らしだと、果物を買う勇気が出ないので嬉しいです。

 連休中に友人と久しぶりに母校を訪問。私達がいた頃は情報系の科目は少なかったのですが、新しい先生方は情報専門の方々が多いみたいです(鹿児島大学出身の人多いし)。Javaで分散オブジェクトとか、DNAの構造を圧縮するアルゴリズムとか情報セキュリティの研究をしているみたいで楽しそうです。もう一回学生をやってみたくなりました。
マイクロソフト社のアカデミックアライアンスも取得したらしく、.netとか勉強できるみたいです。なんで、私達の頃に無かったのか…。
 形状記憶合金というのをご存知でしょうか?その名の通り、ある形状を記憶させて熱処理すると、その合金は熱を加えただけで記憶された形状に戻ろうとします。この性質を利用して、車を走らせよう、という研究をしている先生がいるのですが、結構マスコミに取り上げられたみたいで、テレビに映ったときの動画とか、新聞の記事とかを見せてくださいました。ただこの車は体重40kg以下の人しか乗れないので、乗るのは当然無理です。分速720mという恐るべき速さ(?)で走り、燃料はガスでお湯を沸かしその水蒸気、というエコカーは実用は当分先になりそうです。
 卒業した学科の紅一点のA先生にもお会いしました。進路相談したとき、
私:「目が悪くなるから、情報系には進みたくありません。」
先生:「プログラムを書くだけがソフトウェアのしごとじゃないよ。」
このとき、私はソフトウェアの製造過程もシステムエンジニア、とは何か、とも知らずに、結局在学中には進路決定せずに、今に至ります。結果、先生の思う通りの仕事に就いてしまいましたが。
 地元で仕事すると狭い業界なので、先輩方から噂を広められてしまいます。嬉しいのだけど、下手なことは出来ない、と思う今日この頃です。