我试图理解这个事实。 ArrayList将数据存储在:
中 private transient Object[] elementData;
现在,例如,当我们向ArrayList添加一个元素时,它使用以下内容:
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
我不理解elementData[size++] = e;
行。我看到了一种方法,我认为这一行与以下内容有关:
@SuppressWarnings("unchecked")
E elementData(int index) {
return (E) elementData[index];
}
我不明白为什么elementData
既被用作方法名称又被用作名称...
答案 0 :(得分:2)
由于数组的类型为Object [],因此写入它是类型安全的,因此是直接写入访问。
elementData[size++] = e;
阅读是不同的,因为我们需要的元素属于E
类型,而不是Object
。我们假设这将是有效的(至少如果客户端表现良好),但我们需要有一个地方我们进行转换并说服编译器这是安全的。这就是elementData(int)
方法的来源,以及@SuppressWarnings
注释。