Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中插入原语数组的ArrayList后返回原语数组_Java - Fatal编程技术网

在Java中插入原语数组的ArrayList后返回原语数组

在Java中插入原语数组的ArrayList后返回原语数组,java,Java,但这样做,数组的地址被添加了吗?为什么 x.get(0) ---> returns 1 List x=new ArrayList(); 双精度[]名称=新双精度[5]; 名称[0]=1 名称[1]=3; 名称[2]=3; . . . . x、 加上(姓名); 获取x.get(0)-->返回@as12cd2(数组地址) double[]数组是对象。所以,您得到了地址,整个数组被添加到索引0处 您可以使用Arrays.toString(x.get(0))获得可读的数组打印 数组的toSt

但这样做,数组的地址被添加了吗?为什么

x.get(0) ---> returns 1
List x=new ArrayList();
双精度[]名称=新双精度[5];
名称[0]=1
名称[1]=3;
名称[2]=3;
.
. 
. 
.
x、 加上(姓名);
获取x.get(0)-->返回@as12cd2(数组地址)

double[]
数组是对象。所以,您得到了地址,整个数组被添加到索引0处

您可以使用
Arrays.toString(x.get(0))
获得可读的数组打印


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

这是因为
列表由
double[]
组成,而不是
double

由于
double[]
是一个数组,因此还必须指定该数组的位置。如下所示:

     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)
如果你想只使用
x.get()
,你的
列表必须由
double
原语组成。然后你可以使用单独的方法将
double
数组添加到
列表
(我不知道内置的方法):

List addArray(List o,double[]a){
对于(双d:a)
o、 加(d);
返回o;
}

希望这是有意义的。我喜欢使用简短的变量名来使逻辑更加清晰。只要知道变量是什么,就可以了。

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

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

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

  return o;
}

列表只能存储对象,因此您必须使用Double而不是Double。这很符合逻辑,但没有解释第一个示例的工作原理。根据此逻辑,它应该与第二个示例具有相同的结果,因为有一个
Double[]
list也被使用。此外,没有内置的单一方法将数组添加到现有列表中,但它与
doubleList.addAll(Arrays.asList(doubleArray)
一起工作。请参见下面@n00begon的答案。添加数组可以简化:doubleList.addAll(Arrays.asList(1.0、2.0、3.0、4.0、54.0、6.0))@sasha_trn我同意,我只是为了清晰起见将其隔开。这没什么特别的,数组是列表中唯一的元素。让我惊讶的是,在第一个示例中,显然进行了一些拆箱,然后列表包含
double
元素,而不是
double[]
应该如此。这是非常奇怪的,可能会导致错误,因为
get(…)
预计将返回
double[]
在编译时,但在运行时返回
double
。OP不想打印数组。他想知道为什么数组作为单个元素添加,而不是取消绑定。如上所述,这是因为列表存储
double[]
。还显示了一种将数组元素添加到列表中的方法。这不是问题所在。阅读代码之间的行,您会注意到OP对数组的打印方式并不感到惊讶,而是将数组作为单个元素放入列表中,而不是取消绑定。原因是目前最热门的答案(由@Jon和@n00begon提供)解释得很好。
x.get(0)[0]
List<Double> addArray(List<Double> o, double[] a) {
  for(Double d : a)
    o.add(d);

  return o;
}
List<Double> doubleList = new ArrayList<Double>();
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