Java補足

この前のプロ2補足が無駄に評判が良かった気がしたので調子こいて適当になんか書こうと思いました。多分Javaの文法がまあまあ分かったくらい向け。主要APIの学習はなんというかソースリーディングの効果があるというか、インタフェース的なオブジェクト指向設計の勉強になるというか。Javaを使うなら基本クラス(java.lang)、I/O(java.io)、コレクションフレームワーク(java.util)あたりを知っておくと吉。GUIがやりたくなるのも分かるのでその場合はjava.awt、javax.swing。
Java6の日本語API仕様は一応こちらとなっています。
http://java.sun.com/javase/ja/6/docs/ja/api/overview-summary.html


java.utilに含まれる*1「コレクションフレームワーク」は「アルゴリズムとデータ構造」のキーワードにおける「データ構造」を提供します。多分。ゆえにそっちの知識があると理解が早いかと思います。なくても実例を元にそれを学ぶチャンスです。結構高度に抽象化・階層化されているので一通り全体を見渡すまでは少々分かりにくいかもしれませんが、そこは我慢。このフレームワークが使えるようになるとかなりいろいろな作業がやりやすくなるはず。ゲームとか普通プログラミングっていうとプログラマの負担を全く考えない要請が多いからねえ。一番分かりやすく言うと可変長配列とかが簡単に利用できます。

public interface Collection<E> extends Iterable<E>

はいきたー。一番抽象度の高いルートインタフェース。これじゃなんのことやらわかりません。「何かの集まり」程度の意味。むしろサブインタフェースから共通部分を抽象したものに見えます。このインタフェースのメソッドを見るよりは、それぞれのサブインタフェースのメソッドを見ていった方がいいと思います。Iterableを継承しますが、これは拡張for文(foreach文)を利用可能にする文法に関与するインタフェースです。つまりCollectionの子孫はすべてforeach文で利用できます。

public interface List<E> extends Collection<E>

順序つきの列。代表的な実装クラスはArrayList(配列)とLinkedList(リンクリスト)でしょう。ボトムアップ説明の方がいい気がしてきた…。

public interface Set<E> extends Collection<E>

重複要素のない集まり。数学でいう集合。追加・削除・検索を高速に行える構造をしています。実装は基本的にTreeSet(二分探索木)かHashSet(ハッシュ)の2択でしょう。

public interface Map<K,V>

Key→Valueマッピングを保持するデータ構造です。数学でいう写像といえばそうか。コレクションとは意味が違うため、Collectionを継承しません。キーは重複しません。つまりすでに存在するキーに対して追加を行うと、値が上書きされます。なんだかんだでキーには文字列を指定することが多くなるでしょう。表す概念はまあまあ違いますが、実装上の理由からSetとの関係が深くなります。実装は基本的にTreeMap(二分探索木)かHashMap(ハッシュ)の2択でしょう。

public interface Deque<E> extends Queue<E>

「スタック」や「キュー」の構造を使いたいことは多々あるでしょう。結局のところ、これらは「先頭・末尾の両端で追加・削除ができる」構造があれば十分です。このインタフェースは1.6で追加されました。実装は多分にArrayDeque(配列)とLinkedList(リンクリスト)の2択です。LinkedListはListインタフェースのところでも出てきました。リンクリストは先頭末尾での追加削除が得意ですよね?インタフェースは複数implementsできることを思い出してください。


絶対これ具象クラスの使い方を説明した方がよかった。続く。誰かがゲーム書くときの参考にならないかなー、なんて。

*1:他のものも多少入っているが。