今回はインターフェース DoubleArray とその実装クラス ResizableDoubleArray を見ていきます。
「DoubleArray インターフェース」は、基本的には double の配列を表す型ですが、データを扱う際に便利なメソッドが定義されています・・・と言っても、addElementRolling() メソッド以外は特にどうと言う程のものでもありません。
「ResizableDoubleArray クラス」は、commons-math が提供している唯一の DoubleArray の実装クラスです。
DoubleArray に定義されているメソッドは、簡単なサンプルで充分理解できると思います:
- DoubleArray オブジェクトの取得
- 要素へのアクセス
- addElementRolling() メソッド
DoubleArray オブジェクトの取得
必要な要素が付加された DoubleArray オブジェクトを取得するには、のどちらかでしょう:
import org.apache.commons.math.util.ResizableDoubleArray // 空の DoubleArray を作成して、addElement() で要素を追加 def array1 = new ResizableDoubleArray() array1.addElement(1d) array1.addElement(2d) array1.addElement(3d) assert array1.getElements() == [1d, 2d, 3d] as double[] // 配列を引数にとるコンストラクタから生成 def array2 = new ResizableDoubleArray([1d, 2d, 3d] as double[]) assert array2.getElements() == [1d, 2d, 3d] as double[]
要素へのアクセス
getElement() / setElement() は要素 (double) へのアクセッサ、getElements() は要素を配列として取得するメソッド、getNumElements() は要素の個数(size() にしとけ!)です:import org.apache.commons.math.util.ResizableDoubleArray // 要素の個数 assert array.getNumElements() == 3 // 要素へのアクセス assert array.getElement(2) == 3d array.setElement(1, 4d) // 全ての要素を double[] として取得 assert array.getElements() == [1d, 4d, 3d] as double[]
特に問題なし。
addElementRolling() メソッド
これが DoubleArray インターフェースで唯一気を付けるメソッドかな。 動作は FIFO キューみたいな感じ。 引数の要素が配列の末尾に追加され、配列の先頭の要素が戻り値として返されます:import org.apache.commons.math.util.ResizableDoubleArray def array = new ResizableDoubleArray([1d, 2d, 3d] as double[]) assert array.addElementRolling(4d) == 1d assert array.getElements() == [2d, 3d, 4d] as double[] // 追加した要素は末尾へ。 先頭の要素は削除。
- 作者: 奥村晴彦,杉浦方紀,津留和生,首藤一幸,土村展之
- 出版社/メーカー: 技術評論社
- 発売日: 2003/05
- メディア: 単行本
- 購入: 2人 クリック: 61回
- この商品を含むブログ (61件) を見る