为什么数组被初始化为默认值而不是java中的arraylist?

bra*_*orm 5 java arrays list arraylist

引擎盖下ArrayList使用的实施Array.但是,Arrays初始化为默认值(0 or null)ArrayList只是空的.为什么是这样?

       int[] arr = new int[10];
       String[] arr1 = new String[11];
       System.out.println(Arrays.toString(arr));
       System.out.println(Arrays.toString(arr1));
      List<Integer> list = new ArrayList<Integer>(10);
      System.out.println(list);

      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
      [null, null, null, null, null, null, null, null, null, null, null]
      []
Run Code Online (Sandbox Code Playgroud)

这意味着我每次使用时ArrayList,都需要填写内容; 我想在我的代码下面的一部分,它被扔NoSuchElementException,然后我意识到,这不是违约,作为地方Arrays

if (list.get(i)==null){
         list.add(i,x);
  else:
        list.add(i,list.get(i)+x)
Run Code Online (Sandbox Code Playgroud)

编辑:

even List<Integer> list = new ArrayList<Integer>(10);
prints [] although I initialized the size;
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 12

构造数组时,数字是数组的实际大小(以后不能更改).ArrayList构造函数中的数字是初始容量(为元素保留的空间),但大小为零.在ArrayList构造之后,它的大小会发生变化.

  • @Xbit是的.10只是初始容量.之后可以增加. (3认同)

tbo*_*odt 4

创建数组时,您指定大小。这是必需的,因为数组的大小在创建后就无法更改。那么,数组的每个元素中都必须包含一些内容,最明显的内容是0or null

另一方面,ArrayLists 被设计为能够调整大小。因此,您在创建它们时不必指定大小。如果起始大小大于零,则必须初始化所有这些元素,并且不这样做更容易。所以起始大小为零。