2014-09-24 8 views
79

Gibt es einen Vorteil (oder einen großen Unterschied) zu Arrays.asList (etwas) über Collections.singletonList (etwas), um eine Liste mit einem Element zu machen? Letzteres macht die zurückgegebene Liste ebenfalls unveränderlich.Arrays.asList() vs Collections.singletonList()

+7

Sie können auch Guavas 'ImmutableList.of()' und 'Lists.newArrayList()' in den Mix werfen. – biziclop

+0

Nebenbei habe ich Collections.singletonList() Probleme verursacht, wenn eine Methode eine Liste zurückgibt, die später geändert wird. –

Antwort

119

Collections.singletonList(something) ist unveränderliche während Arrays.asList(something) ist eine feste Größe List Darstellung eines Arrays, wo die Liste und Array wird in der Halde verbunden ist.

Arrays.asList(something) ermöglicht nicht strukturelle Änderungen gemacht, die sowohl in der Liste und der verbundenen Array reflektiert wird. Es wirft UnsupportedOperationException zum Hinzufügen, Entfernen von Elementen, obwohl Sie ein Element für einen bestimmten Index festlegen können.

Alle Änderungen an der Liste, die von Collections.singletonList(something) zurückgegeben werden, führen zu UnsupportedOperationException.

Auch die Kapazität der von Collections.singletonList(something) zurückgegebene Liste wird immer im Gegensatz zu Arrays.asList(something) deren Kapazität ist die Größe des gesicherten Array sein.

40

Ich würde nur hinzufügen, dass die Singletonlist nicht von einem Array unterstützt wird und nur einen Verweis auf dieses eine Element hat. Vermutlich würde es weniger Speicher benötigen und je nach Anzahl der Listen, die Sie erstellen möchten, erheblich sein.

Verwandte Themen