java - java.util.ArrayList 中的泛型

标签 java generics arraylist

<分区>

我打开java.util.ArrayList的源码,有一点不明白:为什么ArrayList参数化后elementData[]数组的类型是Object?

public class ArrayList<E> extends ... {
  .........
  private transient Object[] elementData;
  .........
  public boolean add(E e) {/*More code*/}
}

问题:为什么不将 elementData 定义为:

private transient E[] elementData

*有什么优点和缺点?

最佳答案

每次你用原始类型创建一个列表,比如:

List<MyObject> list = new ArrayList<MyObject>();

构造函数将所有数据转换成一个数组,必须是一个Object[]数组,on:

public ArrayList(Collection<? extends E> c) { elementData = c.toArray(); ...

我认为发生这种情况是因为 ArrayList 可以在没有原始类型的情况下进行初始化,例如:

List list = new ArrayList();

    list.add(new String("VALUE"));
    list.add(new Integer("1"));

    for (Object c : list) {
        System.out.println(c.toString());
    }

而且你可以在里面放不止一种类型的物体。

此外,ArrayList 使用

Arrays.copyOf(elementData, size);

管理一些操作,这将返回一个 Object[]。

你也可以看看herehere正如保罗所说。

关于java - java.util.ArrayList 中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16046242/

相关文章:

java - 以编程方式将复杂的 Excel 文件转换为 HTML 格式

ios - 类型 'any View' 不能符合泛型协议(protocol)上的 'View'

java - Twitter4j,我该如何注销?

java - 引用变量的更新

java - 另一个类的静态函数不会修改传入的引用

function - typescript 从传递的函数返回类型推断返回类型

java - 如何返回数组列表中重复字符串的数量与另一个数组列表JAVA比较

java - 可以在 ArrayList 中保存字符串或整数的类?

java - 以两个 ArrayLists 作为参数的方法