Nella classe Data Structures abbiamo studiato la classe Java ArrayList e come cresce l'array sottostante quando un utente aggiunge più elementi. Questo è capito. Tuttavia, non riesco a capire come esattamente questa classe libera memoria quando molti elementi vengono rimossi dalla lista. Osservando la fonte, ci sono tre metodi che rimuovono gli elementi:Java: come ArrayList gestisce la memoria
public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
}
Nessuno di essi riduce la matrice del datastore. Ho persino iniziato a chiedermi se la memoria si è mai verificata, ma i test empirici dimostrano che è così. Quindi ci deve essere un altro modo in cui viene fatto, ma dove e come? Ho controllato anche le classi genitore senza successo.
Per favore riformatta il codice. Stackoverflow non capisce [codice], modifica il tuo post, seleziona lo snippet di codice e premi il pulsante "Codice" per formattarlo. – Behrang
Sì, questo è il mio primo post ed ero in procinto di capire come usare la formattazione. Qualcuno mi ha aiutato però :) – cka3o4nik