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)
答案 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)
这是因为List
由double[]
而不是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[]
实现都是对象地址的返回。这是您的代码打印的内容。