Java数组:属性大小?

时间:2017-09-06 11:00:11

标签: java arrays arraylist

我在Stack Overflow上找到了这个答案:

  
    

length是常量,用于查找数组存储容量而不是数组中元素的数量

  
     

示例:

a.length
     

int a[] = new int[5] a[0] = 10 总是返回5,称为a的容量   数组,所以length总是返回CAPACITY。但是

     
    

"数组中的元素数量称为size"

  
     

示例:

a.size = 1
     

将导致a.length = 5size()

     

length适用于集合,a.size适用于java中的数组

Difference between size and length methods?,2017-09-06)

由于这个答案得到了五个赞成票,我认为这是正确的。但实际上Java中的数组没有大小属性​​。我知道有一个ArrayLists的方法。但是,如果使用普通数组,blocks-provider如何等于1?我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

你是对的,答案是错误的:Java数组没有.size属性,只有.length

为了给答案的作者带来疑问,我怀疑他们正试图解释一个数组如何被ArrayList内部使用。

ArrayList实际上通常在元素数组旁边有一个.size成员

class ArrayList<T> implements ... {
    private T[] elements;
    private int size;
    ...
}

答案 1 :(得分:2)

数组在声明时初始化,因此它们的大小始终等于它们的长度。

int[] array = new int[5];
for (int i : array) System.out.println(i);
System.out.println(array[4]);

将为循环打印5次“0”,然后再次打印“0”。请注意array[4]没有例外:此元素存在。

ArrayLists也不是这样。

ArrayList<Integer> list = new ArrayList<>(5);
// no output, because no elements are contained
for (int i : list) System.out.println(i);
// Exception: no such element
System.out.println(list.get(4));

答案 2 :(得分:1)

  

但是,如果使用普通数组,a.size如何等于1?我错过了什么吗?

ArrayList内部使用数组,并且在不断向其中添加元素时,它会动态增加数组的长度。

size方法检查数组中实际存在的元素数量并返回该数量。

如果查看数组列表的源代码,它会维护一个大小变量,并在添加元素时递增它

public void add(int index, E element) {
393         rangeCheckForAdd(index);
394 
395         ensureCapacity(size+1);  // Increments modCount!!
396         System.arraycopy(elementData, index, elementData, index + 1,
397                          size - index);
398         elementData[index] = element;
399         **size++;**
400     }

然而,数组上没有这样的包装器,你直接在数组上运行,因此不同。