独習Java第10章 Javaクラスライブラリの初歩(10.4)

ジェネリクスVectorクラス、Enumratorインターフェースにイテレータなどの章。
10.1から10.3まではRandomとかCalendarとかだけど、ほぼ使えるので放置しておく。
環境:UbunruNetbookRemix 10.10 / Oracle(Sun) JDK6 update22

Vectorクラス

いわゆる動的配列でいいのかな。


ジェネリクスを指定できるところはオプションなので、指定しなくてもOKらしい。

$ javac -Xlint:unchecked

とパラメータを付けると、ジェネリクスを使わないでオブジェクトを操作している箇所が見れるとか。


ジェネリクスで使われる慣例の型パラメータには

パラメータ 意味
E 要素
K キー
N
T
V

があるらしい。Element, Key, Number, Type, Valueの頭文字かな?

書いてみる

// VectorSample.java
import java.util.*;

class VectorSample
{
  public static void main(String args[])
  {
    Vector<String> vector = new Vector<String>();
    vector.add("1");
    vector.add("2");
    vector.add("3");
    vector.add("4");
    vector.add("5");

    Iterator iterator = vector.iterator();

    while (iterator.hasNext())
    {
      System.out.println(iterator.next());
    }
  }
}

実行してみる

$ javac VectorSample.java
$ java VectorSample
1
2
3
4
5

……感動が少ない。


ソース書き終わってから調べてみたら、Vectorは古いし速度的に遅いからArrayListとかの方が使われるとかなんとか。
まあ、ジェネリクスの書き方を知らなかったし、良しとするか。


動的配列ねえ……

const
  ARRAY_SIZE = 5;
var
  i: Integer;
  ary: array of Integer;
begin
  SetLength(ary, ARRAY_SIZE);
  ary[0] := 1;
  ary[1] := 2;
  ary[2] := 3;
  ary[3] := 4;
  ary[4] := 5;
  for i := Low(ary) to High(ary) do
    Writeln(ary[i]);
  ary := nil;
end.

ObjectPascalだったらすぐ書けるんだけどなー。


とりあえず今のところ普通に使われる動的配列(リスト?)はArrayListとLinkedListで、前者はget()とかが速く、後者は挿入とか削除が速いらしい。
多分、前者は一般的な配列のような実装…な気がする。
後者はC言語とかの「前後の要素が持っている、その要素へのポインタを付け替える」だけ、みたいな実装…かな。わかんないけど。
クラス名といい、その特徴といい、多分そうなんだろう。多分。