1. ホーム
  2. java

[解決済み] JavaでList<Double>からdouble[]にキャストする方法とは?

2023-07-07 18:57:13

質問

このような変数があります。

List<Double> frameList =  new ArrayList<Double>();

/* Double elements has added to frameList */

新しい変数に、型が double[] の型を持つ新しい変数を作成することはできますか?

どのように解決するのですか?

ハイパフォーマンス - あらゆる Double オブジェクトは、1つの double の値をラップします。もし、これらの値をすべて double[] の配列に格納したい場合は を持つ のコレクションに対して反復処理を行います。 Double のインスタンスのコレクションを繰り返し処理します。A O(1) のマッピングは不可能なので、これが最速になるはずです。

 double[] target = new double[doubles.size()];
 for (int i = 0; i < target.length; i++) {
    target[i] = doubles.get(i).doubleValue();  // java 1.4 style
    // or:
    target[i] = doubles.get(i);                // java 1.5+ style (outboxing)
 }


コメントでの追加質問ありがとうございます ;) 以下は、フィッティングのソースコードです。 ArrayUtils#toPrimitive メソッドのソースコードです。

public static double[] toPrimitive(Double[] array) {
  if (array == null) {
    return null;
  } else if (array.length == 0) {
    return EMPTY_DOUBLE_ARRAY;
  }
  final double[] result = new double[array.length];
  for (int i = 0; i < array.length; i++) {
    result[i] = array[i].doubleValue();
  }
  return result;
}

(そして私を信じてください、私は最初の答えにこれを使いませんでした - たとえそれが...かなり似ていても :-D )

ところで、Marcelosの答えの複雑さはO(2n)です。なぜなら、それは2回(裏で)反復するからです。 Double[] を作り、次に double の値を削除します。