In Java 8 ist die Standardkapazität von ArrayList 0, bis mindestens ein Objekt zum ArrayList-Objekt hinzugefügt wird (Sie können es als verzögerte Initialisierung bezeichnen).
Die Frage ist nun, warum diese Änderung in JAVA 8 vorgenommen wurde.
Die Antwort ist, Speicherplatz zu sparen. Millionen von Array-Listenobjekten werden in Echtzeit-Java-Anwendungen erstellt. Die Standardgröße von 10 Objekten bedeutet, dass wir bei der Erstellung 10 Zeiger (40 oder 80 Byte) für das zugrunde liegende Array zuweisen und diese mit Nullen füllen. Ein leeres Array (gefüllt mit Nullen) belegt viel Speicher.
Durch die verzögerte Initialisierung wird dieser Speicherverbrauch verschoben, bis Sie die Array-Liste tatsächlich verwenden.
Weitere Informationen finden Sie im folgenden Code.
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
Artikel Die Standardkapazität von ArrayList in Java 8 erläutert dies ausführlich.