我在Stack Overflow上找到了这个答案:
length是常量,用于查找数组存储容量而不是数组中元素的数量
示例:
a.length
int a[] = new int[5] a[0] = 10
总是返回5,称为a的容量 数组,所以length总是返回CAPACITY。但是"数组中的元素数量称为size"
示例:
a.size = 1
将导致
a.length = 5
和size()
。
length
适用于集合,a.size
适用于java中的数组
(Difference between size and length methods?,2017-09-06)
由于这个答案得到了五个赞成票,我认为这是正确的。但实际上Java中的数组没有大小属性。我知道有一个ArrayLists的方法。但是,如果使用普通数组,blocks-provider
如何等于1?我错过了什么吗?
答案 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 }
然而,数组上没有这样的包装器,你直接在数组上运行,因此不同。