Sie sollten berücksichtigen, dass subListeine Ansicht der Elemente zurückgegeben wird. Wenn Sie also möchten, dass der Rest der Liste für die Speicherbereinigung geeignet ist, sollten Sie die gewünschten Elemente in ein neues kopieren List:
Wenn die Liste kürzer als die angegebene Größe ist, erwarten Sie eine Ausnahme außerhalb der Grenzen . Wählen Sie den Mindestwert der gewünschten Größe und die aktuelle Größe der Liste als Endindex.
Beachten Sie zum Schluss, dass das zweite Argument eins mehr als der zuletzt gewünschte Index sein sollte.
Obwohl die Frage nicht genau klar ist, hört es sich so an, als ob Sam das Ende der Liste löschen möchte. Daher sollte Ihre Antwort eine list.clear () enthalten.
mP.
Dies funktioniert wahrscheinlich nicht so gut wie die Lösung von karim79, die die beste Alternative darstellt - sie hat die besten Chancen auf eine gute Leistung und ist auch der sauberste Code.
Lawrence Dol
Ich denke, es hängt von der Anzahl der zu entfernenden Elemente ab (und auch davon, ob die Liste Änderungen unterstützt)
Die erste Option ändert die Liste, die zweite nicht. Es sollte seinlist = list.subList(0, 100)
nessa.gp
3
Beachten Sie auch, dass dies subList(100, list.size()).clear()nur funktioniert, wenn die Methode clear in list implementiert ist. Wenn Sie beispielsweise listmit List<String> list = Arrays.asList(someString.split(","));clear () erstellen , wird dies ausgelöst, UnsupportedOperationExceptionda listes sich um eine Zusammenfassung handelt List.
Gyuri
Wenn Sie die ersten n Elemente der Liste list.subList(n, list.size()).clear();
behalten möchten
1
Schade, dass Sie ein Objekt erstellen müssen, um eine Liste zu verkürzen
David Bradley
1
@ DavidBradley Stimmt, aber HotSpot kann dies tatsächlich optimieren
Stefan Reich
8
subList, wie in den anderen Antworten vorgeschlagen, ist das erste, was mir in den Sinn kommt. Ich würde auch einen Stream-Ansatz vorschlagen .
source.stream().limit(10).collect(Collectors.toList());// truncate to first 10 elements
source.stream().skip(2).limit(5).collect(Collectors.toList());// discards the first 2 elements and takes the next 5
Stream.limit
sollte ich den Trick machen ( docs.oracle.com/javase/8/docs/api/java/util/stream/… )oder:
quelle
list = list.subList(0, 100)
subList(100, list.size()).clear()
nur funktioniert, wenn die Methode clear in list implementiert ist. Wenn Sie beispielsweiselist
mitList<String> list = Arrays.asList(someString.split(","));
clear () erstellen , wird dies ausgelöst,UnsupportedOperationException
dalist
es sich um eine Zusammenfassung handeltList
.list.subList(n, list.size()).clear();
subList
, wie in den anderen Antworten vorgeschlagen, ist das erste, was mir in den Sinn kommt. Ich würde auch einen Stream-Ansatz vorschlagen .quelle