En java 8, la capacité par défaut de ArrayList est de 0 jusqu'à ce que l'on ajoute au moins un objet dans l'objet ArrayList (vous pouvez l'appeler initialisation paresseuse).
La question est maintenant de savoir pourquoi ce changement a été fait dans JAVA 8 ?
La réponse est d'économiser la consommation de mémoire. Des millions d'objets de type tableau sont créés dans les applications Java en temps réel. La taille par défaut de 10 objets signifie que nous allouons 10 pointeurs (40 ou 80 octets) pour le tableau sous-jacent à la création et que nous les remplissons avec des nuls. Un tableau vide (rempli de nulls) occupe beaucoup de mémoire.
L'initialisation paresseuse reporte cette consommation de mémoire jusqu'au moment où vous utiliserez réellement la liste de tableaux.
Veuillez consulter le code ci-dessous pour vous aider.
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
Article Capacité par défaut de ArrayList en Java 8 l'explique en détail.