Entry

今週のそれはどうなんだ? - Java コレクションフレームワークのソモソモ論

2007年06月24日

かなり前に買った本をつらつら読んでいて思ったこと。

Javaコレクションフレームワーク
田中 良浩 小山 博史
ソフトバンククリエイティブ (2005/03/01)
売り上げランキング: 151473
おすすめ度の平均: 4.0
5 "コレクションフレームワークの入門書として最適"
3 持っておいても損はない
4 Javaプログラマにとって必須の知識

こちらのまえがきに,こんな話がありました(〔〕部は aian)。

これらの典型的なデータ構造〔(連結リスト,ハッシュテーブルなどのデータ構造)〕は、配列とインターフェースとクラスとを組み合わせれば誰でも実装できます。つまり、言語仕様で定義されていなくても独自に作成できるのです。実際に、C/C++ 言語などでは、言語仕様にこういったデータ構造が含まれていないため、プログラマが独自にデータ構造を設計し、アルゴリズムを実装しています。しかし、これらのデータ構造のうちのいくつかは頻繁に使われるもので、既に研究も進んでいます。こういったものを何人ものプログラマが一からコーディングするのは無駄ですし、特にプログラム初心者が実装するとバグが混入しやすくなります。そこで,Java ではこういったデータ構造のいくつかを共通的に扱えるように,標準 API として最初から言語仕様に含めています。

『Javaコレクションフレームワーク』(田中 良浩,小山 博史,ソフトバンククリエイティブ,2005年,p2)

話そのものは理解できるんですけれど,どうも説明の筋道が違っているような気が……。どこら辺が疑問なのかというと,「言語仕様としてデータ構造をサポートしている云々」についてです。これでいいのかな。

例えば,C はともかく C++ には,標準テンプレートライブラリ(STL)に,Java と同様の map や list といったライブラリがあったりします。引用によると,これらは「言語仕様に含まれていない」としているわけですけれど,その一方で,java.util.* 以下の標準クラスは「言語仕様に含まれている」と言っているところが謎です。前者の基準に従えば,Java だってプリミティブなデータ型に List や Map はないわけだし,そもそも,java.util.* を import しなきゃ使えないってな意味で,「言語仕様に含まれている」と言えるのか微妙なんじゃないでしょうか。

また,言語仕様の話からはちょっと外れるんですけれど,C を使う場合にこれらのデータ構造を一から作らなくちゃいけないかというと,半分当たっているけれど半分間違っているような気もします。というのも,ここら辺の典型的なデータ構造は,言語仕様にはないものの,開発環境で実装済みだったりするからです。例えば,FreeBSD のライブラリには queue(3) のようなもんがあるし,他の環境でも似たような実装があるはずです。

そういうわけで,他の言語と比較して,java.util.* のコレクションフレームワークを説明するのは,ちょっと無理があるんじゃないか,と思ったりするわけです。別に Java に特別なことではない。

引用にもある通り,もともとデータ構造やアルゴリズムは特定の言語仕様に基かなきゃ実現できない類のもんじゃありませんから,よく使うもんがライブラリ化されるのはある意味当然っちゃ当然な気もします。そうしてみると,本書がなぜ(半分無理矢理)配列から話を始めるのかも,ちょっとよく分かりません。実装と概念は別物ですから,Java で説明する場合,素直にクラスから話を始めればいいとも思うんですけど……どうなんでしょ。

本書は,冒頭より後のリファレンス部分は便利に使えるんですけれど,初めの概念説明はちょっと分かりづらく思えてしまいます。無理に分かりやすく説明したために,却って分かりにくくなっちゃった感じ。

Javaプログラマのためのアルゴリズムとデータ構造
近藤 嘉雪
ソフトバンククリエイティブ (2004/03)
売り上げランキング: 111047
おすすめ度の平均: 4.0
4 わかりやすい
4 とっかかりとして良かった本

本書は,コレクションフレームワークの「使い方」を説明したもんなので,データ構造とアルゴリズムの「中身」を知るには,こっちの方がいいのかも。あたしゃ C の方を持ってるんですけど,分かりやすくてよかったです。Java でデータ構造の中身を云々するって機会が,そもそも無い感じもするんですけど。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN