当前位置: 首页 > 面试题库 >

将Arrays.asList与int数组一起使用

阳英朗
2023-03-14
问题内容

使用java.util.Arrays.asList,为什么它对int(原始类型)和String数组显示不同的列表大小?

a)对于int数组,每当我执行以下程序时,列表大小= 1

public static void main(String[] args) {
        int ar[]=new int[]{1,2,3,4,5};
        List list=Arrays.asList(ar);
        System.out.println(list.size());

    }

b)但是,如果我从int数组类型更改为Stringarray(如String ar[] = new String[]{"abc","klm","xyz","pqr"};),则列表大小为4,我认为这是正确的。

PS :使用Integer(包装类)数组,则结果很好,但是我不确定为什么在原始int数组中列表大小为1。请解释。


问题答案:

List由于Java泛型而无法保存原始值(请参阅类似的问题)。因此,当您调用Arrays.asList(ar)Arrays 时,将创建一个仅包含一项的列表-
int数组ar

编辑:

的结果Arrays.asList(ar)将为List<int[]>,而 不是 List<int>,并且将保存一项,即的数组int

[ [1,2,3,4,5] ]

您不能int从列表本身访问原始。您必须像这样访问它:

list.get(0).get(0) // returns 1
list.get(0).get(1) // returns 2
...

我认为这不是您想要的。



 类似资料:
  • 问题内容: 如果您有一个Array,并且想使用Java8 forEach()方法,那么哪种方法更好或更有效: 要么 差异是否显着,或者有更好的解决方案来解决? 问题答案: 都不行 如果您已经有一个数组, 我会用: 因为您将数组到流的转换留给了JDK-让它负责效率等。 但是,由于您没有数组,因此我将使用的varargs创建值的流: 这又让JDK负责有效地按需传输值。

  • 问题内容: 我的项目遇到了麻烦。谁能向我解释为什么我不能使用来访问? 下面是我的切入点的代码: 我正在尝试使用该方法访问“ 菜单” 组件中的设置。请参阅下面的 菜单 : 我真的很想知道为什么我可以使用来访问和值。我已经阅读了文档并寻找了其他资源,但是我还没有答案,但是我希望有办法可以做到。 问题答案: method中的第一个参数是包含任何属性和方法的对象,它不引用存在属性的React组件。 如果您

  • 问题内容: 我正在使用PDO来执行一条语句,该语句使用将数组作为其值的子句: 上面的代码工作得很好,但是我的问题是为什么不能: 此代码将返回等于(1)中第一项的项目,但不返回数组(2和3)中的其余项目。 问题答案: PDO不适用于此类情况。您需要动态创建带有问号的字符串并将其插入查询中。 如果查询中还有其他占位符,则可以使用以下方法(代码取自我的PDO教程): 您可以使用函数将所有变量连接到单个数

  • 问题内容: 这种转换有什么问题? 在从array读取CreateArrayList中找到的解决方案后,我进行了此操作。第二行(排序)导致以下异常: 线程“主”中的异常java.lang.ClassCastException:[无法强制转换为java.lang.Comparable] 怎么了 我确实意识到可以使用进行排序,但我对此感到很好奇。 问题答案: 让我们考虑以下简化示例: 在println行

  • 问题内容: 我有这个: 输出: 为什么我在这里出错? 和 错误的含义是什么? 它告诉我什么? 问题答案: 您在这里遇到错误,是因为当您使用接受varargs的函数时,此函数在幕后创建了您在其中传递的对象的新数组。因此,实际上得到 了一个整数数组 。 当您传递整数 数组时,请 在后台创建 一个 整数 数组数组 。这就是为什么您不能通过以下循环对其进行迭代: 尝试像这样更改它: 实际上,您将看到对传递

  • 问题内容: 我有一个双重数组。我尝试了如下操作 它不打印任何内容。然后我把它做成一个双数组 它打印。 有人可以解释为什么存在这种差异吗? 问题答案: 您的第一个调用实际上是返回-将参数自动装箱,因为a 不是…。泛型不允许将基本类型用作类型参数。 如果您要将a 转换为,则需要手动执行,或使用第三方库来执行。例如: 请注意,与数组的任何后续更改不同,它 不会 反映在列表中,反之亦然-它是副本,而不是视