29
List<double[]> x = new ArrayList<double[]>();
x.add(new double[]={1,2,3,4,54,6});  

要素 1,2,3,4,54,6 が x に追加されます

x.get(0) ---> returns 1

でもこうすると、配列のアドレスが加算されるのでは?どうして

     List<double[]> x = new ArrayList<double[]>();
    double[] name=new double[5];
    name[0]=1
    name[1]=3;
    name[2]=3;
        .
        . 
        . 
        .
    x.add(name);
    getting x.get(0) ---> returns @as12cd2 (address of the array)
4

4 に答える 4

57

リストに double の配列ではなく double を格納するだけの場合は、リストに格納するものを変更します

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

次に、配列をリストとして配列リストに追加できます。これは、リストが配列ではなく値を格納していることを意味します。これによりget(0)、配列アドレスではなく 1 を与える動作が得られます

Double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 54.0, 6.0 };
doubleList.addAll(Arrays.asList(doubleArray));
doubleList.get(0); //gives 1.0
于 2012-08-27T20:50:01.013 に答える
6

これは、がではなく でList構成されているためです。double[]double

adouble[]は配列であるため、その配列からも位置を指定する必要があります。そのようです:

x.get(0)[0]

を使用できるようにしたい場合は、プリミティブで構成x.get()するList必要があります。次に、別の方法を使用しての配列をにdouble追加できます(組み込みの方法はわかりません):doublesList

List<Double> addArray(List<Double> o, double[] a) {
  for(Double d : a)
    o.add(d);

  return o;
}

うまくいけば、それは理にかなっています。ロジックをより明確にするために、短い変数名を使用するのが好きです。変数が何であるかを知っている限り、問題ないはずです。

于 2012-08-27T20:45:00.490 に答える
3

double[]配列はオブジェクトです。したがって、アドレスを取得すると、配列全体がインデックス 0 に追加されます。

Arrays.toString(x.get(0))読み取り可能な配列印刷を取得するために使用できます。

配列の toString() は、[ の後に、配列の要素のデータ型を表す文字が続き、その後に @ が続き、メモリ アドレスが続きます。

于 2012-08-27T20:42:49.563 に答える
1

any ( を含む)のデフォルトのtoString()実装は、オブジェクト アドレスの戻り値です。これは、コードによって出力されるものです。Objectdouble[]

于 2012-08-27T20:45:55.510 に答える