在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