ArrayListを使った行列(配列の配列)の取扱い

Javaで行列計算を行なうとき,普段は固定長でのためdouble型としていたのですが,
DBからのデータ取得時などに可変長としたいことがあり,ArrayListを使用しました.
ArrayListと行列(double)データへの変換がわかりにくかったのでメモしておきます.

ArrayListからdoubleへの変換
ArrayListで行列データを定義するには,以下を行います.

ArrayList入れ子にしてしまうと,行列へのキャストが面倒になりますし,
データ構造もわかりにくくなるので,double[]配列をArrayList化します.

ArrayListにはデータを以下のように追加していきます.

データを追加し終わった後,double行列に変換するには,以下を行います.

toArray()することでArrayListの中身がObjectクラスで配列化されますので,
実体としてはdouble
の配列でdoubleとなります.これをキャストして
double型の変数に入れます.

引数なしのtoArray()を使うと,返り値がObject型のままとなり
キャストができずClassCastExceptionで例外となってしまいます.
そのため,引数には必ず変換先の配列を入れておきます.
事前に変換先を用意していない場合は同じ型のデータをnewして入れます.


②double
[]配列からArrayListへの変換
この場合,java.util.Arrays.asList()を使用します.
このメソッドはstaticなため,インスタンスは必要なく使用できます.

asList()で得たListはそのままだと従前のArrayList<>とは別クラスであり
add()などの関数が使用できません.そこで,asList()で得たListでさらに
ArrayListのインスタンスを定義してやる必要があります.

こうすることでadd()も使えるdouble[]のArrayListが作成できます.


参考文献:
Listから配列への変換,配列からListへの変換
http://www.dab.hi-ho.ne.jp/sasa/biboroku/java/toArray.html


Arrays.asList() で生成した ArrayList が add() を使えないワケ - Qiita
https://qiita.com/chooyan_eng/items/08f977525e5f4e4acd7e