Java 8中,ArrayList的默认容量为0

2020-08-20  本文已影响0人  rainbowz

答案是节省内存消耗。在实时Java应用程序中创建了数百万个数组列表对象。默认大小为10个对象意味着我们在创建时为底层数组分配10个指针(40或80个字节),并用空值填充它们。空数组(填充空值)占用大量内存。

延迟初始化会推迟此内存消耗,直到您实际使用数组列表为止。

请参阅以下代码以获取帮助。

ArrayList al = new ArrayList();          //Size:  0, Capacity:  0
ArrayList al = new ArrayList(5);         //Size:  0, Capacity:  5
ArrayList al = new ArrayList(new ArrayList(5)); //Size:  0, Capacity:  0
al.add( "shailesh" );                    //Size:  1, Capacity: 10

public static void main( String[] args )
        throws Exception
    {
        ArrayList al = new ArrayList();
        getCapacity( al );
        al.add( "shailesh" );
        getCapacity( al );
    }

    static void getCapacity( ArrayList<?> l )
        throws Exception
    {
        Field dataField = ArrayList.class.getDeclaredField( "elementData" );
        dataField.setAccessible( true );
        System.out.format( "Size: %2d, Capacity: %2d%n", l.size(), ( (Object[]) dataField.get( l ) ).length );
}

Response: - 
Size:  0, Capacity:  0
Size:  1, Capacity: 10

来源
https://www.it-swarm.dev/zh/java/%E5%9C%A8java-8%E4%B8%AD%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88arraylist%E7%9A%84%E9%BB%98%E8%AE%A4%E5%AE%B9%E9%87%8F%E7%8E%B0%E5%9C%A8%E4%B8%BA%E9%9B%B6%EF%BC%9F/823086287/

上一篇 下一篇

猜你喜欢

热点阅读