在插入到Java中的原始数组的ArrayList之后获取原始数组

时间:2012-08-27 20:41:09

标签: java

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

这是因为Listdouble[]而不是double组成。

因为double[]是一个数组,所以你也必须指定该数组的位置。像这样:

x.get(0)[0]

如果您希望能够使用x.get(),则List必须由double原语组成。然后,您可以使用单独的方法将doubles数组添加到List(我不知道内置的方法):

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

  return o;
}

希望这是有道理的。我喜欢使用短变量名来使逻辑更清晰。只要你知道变量是什么,你应该没事。

答案 2 :(得分:3)

double[]数组是对象。因此,您获取地址并在索引0处添加整个数组。

您可以使用Arrays.toString(x.get(0))来获取可读的阵列打印。

数组的

toString()是打印[,后跟一个表示数组元素数据类型的字符,后跟@然后是内存地址。

答案 3 :(得分:1)

任何toString()(包括Object)的默认double[]实现都是对象地址的返回。这是您的代码打印的内容。