为什么ArrayList类使用名称elementData作为属性和方法?

时间:2017-09-01 19:15:40

标签: java

我试图理解这个事实。 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既被用作方法名称又被用作名称...

1 个答案:

答案 0 :(得分:2)

由于数组的类型为Object [],因此写入它是类型安全的,因此是直接写入访问。

elementData[size++] = e;

阅读是不同的,因为我们需要的元素属于E类型,而不是Object。我们假设这将是有效的(至少如果客户端表现良好),但我们需要有一个地方我们进行转换并说服编译器这是安全的。这就是elementData(int)方法的来源,以及@SuppressWarnings注释。