如果 arraylist 在内部使用 Object[] Array,它是如何异构的

use*_*'MJ 1 java arrays arraylist

arraylist 内部使用 Object[] Array,它是同构的,那么 arraylist 是如何异构的

以下在运行时抛出异常:

Object[] array = new String[3];
array[0] = "a";
array[1] = 1;   // throws java.lang.ArrayStoreException
Run Code Online (Sandbox Code Playgroud)

不像以下编译和运行没有问题

ArrayList list = new ArrayList<String>();
list.add("a");
list.add(1);    // works
list.add(new Object());  // works
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

an 的后备数组ArrayList是 an Object[](即该数组的元素类型是Object类,而不是 的任何子类Object),因此您可以放置​​任何引用类型(以及自动装箱为其相应包装类型的原语) 在里面。

以下不会抛出异常:

Object[] array = new Object[3];
array[0] = "a";
array[1] = 1;
Run Code Online (Sandbox Code Playgroud)

您可以在ArrayList构造函数中看到后备数组的初始化:

public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
        this.elementData = new Object[initialCapacity]; // here
    } else if (initialCapacity == 0) {
        this.elementData = EMPTY_ELEMENTDATA;
    } else {
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    }
}
Run Code Online (Sandbox Code Playgroud)