2011年1月8日土曜日

Java Listではまった

Javaで配列に似たもにListがある。
配列→固定長(初期化時にサイズを決める)
List→可変長(初期化後でもサイズ変更が可能)
ぐらいの理解で居たら、ずいぶんと違うものだったみたい。

たとえば、
List<Double> list = new ArrayList<Double>();
list.add(10.0);
list.add(0.00001);

System.out.println(list.get(0));
System.out.println(list.get(1));
のようなコードであれば、10.0、1.0E-5が帰ってくる。
ここまでは私の考えていたとおりのでした。

イメージとしてはこんな感じ。



次に、List[]を試してみました(Listを配列にする人なんて居ないでしょうけど。。)
さっきのことからすると、こうなるのかなと予想しました。


今回は次のコードで、
List[] arrays = new List[3];
double[] a = new double[]
{
    0, 1, 2, 3, 4
};
double[] b = new double[]
{
   5, 6, 7, 8, 9
};
double[] c = new double[]
{
   11, 22, 33
};

//配列をまとめてListに変換
arrays[0] = Arrays.asList(a);
arrays[1] = Arrays.asList(b);
arrays[2] = Arrays.asList(c);

System.out.println(i + " " + j + " " + arrays[0].get(0));
System.out.println(i + " " + j + " " + arrays[1].get(0));
System.out.println(i + " " + j + " " + arrays[2].get(0));
すると、 [D@78b5f53a、 [D@71f6f0bf、 [D@b37c60dと出力されました。
どうやら、doubleの配列で帰ってきてるみたいですね。

0,5,11と帰ってくると思ってましたよ。Java APIにもget()で指定の要素が取り出せるって書いてあったんですけどね。

私のイメージは間違ってたみたいです。正しくは下の図のようにdouble[]としてはいってるみたいです。

私の思って通りにはならないみたいですけど、次のようにするとちゃんと数値をプリントするようにはなりました。
List arrays = new ArrayList();
double[] a = new double[]
{
     0, 1, 2, 3, 4
};
double[] b = new double[]
{
     5, 6, 7, 8, 9
};

List<Double> alist = new ArrayList();
for (int i = 0; i < 5; i++)
{
    alist.add(a[i]);
}
List<Double> blist = new ArrayList();
for (int i = 0; i < 5; i++)
{
    blist.add(b[i]);
}

arrays.add(alist);
arrays.add(blist);

System.out.println(i + " " + " " + arrays.get(0));
System.out.println(i + " " + " " + arrays.get(1));
出力は[0.0, 1.0, 2.0, 3.0, 4.0]、[5.0, 6.0, 7.0, 8.0, 9.0]とちゃんと帰ってきました。
ただ、これをどうやって元のdouble[]にすればいいのかわからんです。。

入れた値を取り出すにはどうしたら良いのだろう。。

0 件のコメント:

コメントを投稿