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

如果您只想让列表存储双精度而不是双精度数组,请更改列表存储的内容

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()实现是返回 Object 地址。这就是您的代码打印的内容。Objectdouble[]

于 2012-08-27T20:45:55.510 回答