ใน java 8 ความจุเริ่มต้นของ ArrayList คือ 0 จนกว่าเราจะเพิ่มวัตถุอย่างน้อยหนึ่งชิ้นในวัตถุ ArrayList (คุณสามารถเรียกมันว่าการเริ่มต้นแบบขี้เกียจ)
คำถามคือเหตุใดจึงมีการเปลี่ยนแปลงนี้ใน JAVA 8?
คำตอบคือเพื่อประหยัดการใช้หน่วยความจำ วัตถุรายการอาร์เรย์หลายล้านรายการถูกสร้างขึ้นในแอปพลิเคชัน Java แบบเรียลไทม์ ขนาดเริ่มต้นของวัตถุ 10 ชิ้นหมายความว่าเราจัดสรร 10 พอยน์เตอร์ (40 หรือ 80 ไบต์) สำหรับอาร์เรย์พื้นฐานในการสร้างและกรอกข้อมูลด้วย nulls อาร์เรย์ว่าง (เต็มไปด้วย null) ใช้หน่วยความจำจำนวนมาก
การเริ่มต้นอย่างขี้เกียจจะเลื่อนการใช้หน่วยความจำนี้ออกไปจนกว่าคุณจะใช้รายการอาร์เรย์จริงๆ
โปรดดูรหัสด้านล่างเพื่อขอความช่วยเหลือ
ArrayList al = new ArrayList();
ArrayList al = new ArrayList(5);
ArrayList al = new ArrayList(new ArrayList(5));
al.add( "shailesh" );
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
บทความความจุเริ่มต้นของ ArrayList ใน Java 8อธิบายรายละเอียดไว้