在 Java 11 中将数组的内容作为元素添加到列表中 [duplicate]

Add a content of an array as an element to a list in Java 11 [duplicate]

提问人:Evgeny Kuznetsov 提问时间:6/28/2022 最后编辑:Mark RotteveelEvgeny Kuznetsov 更新时间:6/28/2022 访问量:122

问:

我有一个微不足道的问题,我正在思考但没有成功。

假设我们有一个这样的代码片段:

int x[] = new int[]{3,4};

List<int[]> testList = new ArrayList<>();

testList.add(x.clone()); 
//testList.add(Arrays.copyOf(x,x.length)); -neither this works

System.out.println(testList);

代码打印:[[I@6442b0a6]

据我了解,在上面的代码中,我传递了一个指向 .但是我想传递的内容,以便包含副本作为元素?xtestListxtestListx

更重要的是,我想在没有显式迭代的情况下做到这一点。x

Java 数组 引用传递

评论

1赞 Holger 6/28/2022
声明数组的惯用方法是不要在变量名称后使用这种传统语法。此外,仅仅在构造函数中放置一个是不够的。您还应该为变量声明一个类型参数,例如 然后,编译器已经告诉你这不是预期的事情。或者如果它是预期的东西,则使用,因此我们不需要猜测。您可以像以下简单一样复制数组int[] x = { 3, 4}[]<>ArrayListList<Integer> testList = new ArrayList<>();testList.add(x);List<int[]> testList = new ArrayList<>();x.clone()
1赞 Slaw 6/28/2022
是的,你这么说的。这是不清楚的确切句子。你说,“内容”,但你也说,“作为一个元素”。前者表示您想要一个 .但后者可以解释为你想要一个(“一个元素”是单数)。xList<Integer>List<int[]>
1赞 Mark Rotteveel 6/28/2022
你已经这样做了,所以你的问题似乎是打印出数组的问题之一,这就是我添加第二个副本的原因。 是列表 () 的 toString,其中包含单个 int 数组。是数组的 toString(),由 (this is an ) 和 组成,后者是该数组的标识哈希码。如果要打印数组的内容,则需要采取其他措施。[[I@6442b0a6][..][I@6442b0a6[Iint[]6442b0a6
2赞 Slaw 6/28/2022
您已添加到列表中。指针在 Java 中“不存在”。列表中的变量和元素在内存中是同一个数组对象。输出只是数组使用的隐式“到字符串”转换。通常,您将用于实际打印内容。但是你打印出一个 ,这意味着你需要构建自己的打印出来,而不是依赖 。xx[I@6442b0a6Arrays#toString(...)ListStringList#toString()
2赞 Roberto Manfreda 6/28/2022
你的代码很好,这里的问题是原始数组的方法无法反播放它们的内容。因此,您不能在直接传递到 .像这样尝试toStringSystem.out.printlntestList.forEach(arr -> System.out.println(Arrays.toString(arr)));

答:

3赞 Joop Eggen 6/28/2022 #1

最接近您的代码:

Integer[] x = {3, 4};
List<Integer> testList = new ArrayList<>();
Collections.addAll(testList, x); // Size 2.
System.out.println(testList);

由于 List 包含 Object 类,因此必须将 s 框为 Integer。Integerint

int[] x = {3, 4};
List<Integer> testList = IntStream.of(x).boxed().collect(Collectors.toList());

澄清后

int[] x = {3, 4};
List<int[]> testList = new ArrayList<>();
testList.add(x);

for (int[] y: testList) {
    System.out.println(Arrays.toString(y));
}

评论

0赞 Evgeny Kuznetsov 6/28/2022
对不起,我想在最后收到一个数组列表
0赞 Evgeny Kuznetsov 6/28/2022
我已经接受了这个(唯一存在的)答案,但我也给其他人无形的功劳!