【问题标题】:Generics in java.util.ArrayList [duplicate]java.util.ArrayList 中的泛型 [重复]
【发布时间】:2013-04-16 20:16:20
【问题描述】:

我打开了 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

*有什么优点和缺点?

【问题讨论】:

    标签: java generics arraylist


    【解决方案1】:

    每次创建原始类型的列表时,例如:

    List&lt;MyObject&gt;list = new ArrayList&lt;MyObject&gt;();

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

    public ArrayList(Collection&lt;? extends E&gt;c) { elementData = c.toArray(); ...

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

    列表列表 = 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 就像 Paul 说的那样。

    【讨论】:

    • 这并不能解释为什么不能是E[]
    • 我将此解释放在其中一个链接上。 stackoverflow.com/questions/13776576/…
    • 我知道你最后链接到它作为“你也可以看看”。但除此之外,这些都与问题无关,即为什么不E[]
    猜你喜欢
    • 2019-12-26
    • 2021-12-04
    • 2019-06-04
    • 2019-01-09
    • 2017-06-07
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多