查找大小,即存储在 Java 数组中的非空元素的数量

DPK*_*GRG 5 java arrays

目的: Array.length为我们提供初始化为数组的存储。但是想从初始化的总存储中找出存储在数组中的非空元素的数量。我知道很多方法都是可能的,但这里的问题与我使用的方法有关。

因为ArrayList有一个size()方法可以让我们计算存储的实际元素,而不管初始化的总存储量如何。

所以,我想到将数组转换为ArrayList并找出大小。因此我使用Arrays.asList(a).size()如下所示:

public class Driver {

    public static void main(String []args)
    {
        int a[] = new int[10];
        a[0]=30;
        a[1]=100;
        a[2]=33;
        System.out.println((Arrays.asList(a)).size() );
    }
Run Code Online (Sandbox Code Playgroud)

奇怪的是,无论a[0], a[1], ,它都返回结果为 1 a[2]

如果我们使用 withArrayList而不是 Array执行相同的步骤,则会得到结果 3:

{
    List<Integer> temp = new ArrayList<Integer>(20); 
    System.out.println(temp.size()); 
    temp.add(20); 
    temp.add(40); 
    System.out.println(temp.size()); 
}
Run Code Online (Sandbox Code Playgroud)

结果是0 2

问题:是否应该同意实用程序的asListAPI 有Arrays问题,例如错误或限制?

备注: 查看内部实现,我理解asList调用构造函数ArrayList

  public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        size = elementData.length;
        .....
  }
Run Code Online (Sandbox Code Playgroud)

它再次调用集合的toArray. 但是不确定为什么我们得到的答案是 1,因为elementData.length应该存储在 size 值中10

man*_*sta 2

你得到 1 因为Arrays.asList(int[] a)return List<int[]>,而不是List<Integer>。您使用方法的方式asList()不正确。如果你想得到List<Integer>,你应该将数组的内容asList()一一传递给方法。
List<Integer> list = Array.asList(30, 100, 33);
没有直接的方法可以将数组List即时转换为数组