Gewusst wie: implementieren Sie eine Feste Größe "Liste" in Java?
Da die Java-Kern-Bibliothek enthält keine solche Auflistung, würde ein array die beste option sein, vor allem, wenn man sich nicht darauf verlassen, dass Drittanbieter-Bibliotheken?
- Welches Verhalten wollen Sie, wenn Sie versuchen, ein Element hinzufügen, um eine vollständige Liste? Sie soll wohl auch eine Methode, die prüft, ob es etwas Platz ist.
- Arrays.asList tut genau dies.
- Die Frage ist mehrdeutig: in der Liste fixiert ist? oder seiner Größe fixiert ist?
InformationsquelleAutor mre | 2012-01-23
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde schreiben eine wrapper-Klasse um ein
ArrayList
, und in deradd
undaddAll
Methoden, würde ich prüfen, für die Liste die Größe, bevor Sie neue Elemente. Wenn Sie die maximale Größe erreichen, können Sie dann eine exception werfen (oder gar nichts, je nachdem, was Sie wirklich wollen in Ihrem code).Hier ein kurzes Beispiel:
Arrays.asList(T ...)
Returns a fixed-size list backed by the specified array
fixedList
welcher bereits 10 Objekte, wird es eine exception werfen oder einfach nur still fail?Könnte man ein array verwenden, oder eine
ArrayList<E>
pre-initialized mit der gewünschten Größe.Wenn Sie wollen aktiv verhindern die Erweiterung von der Liste, dann wird ein array verwenden, ist wahrscheinlich das einfachste.
ArrayList
Beispiel dazu führen würde, dass es zu überschreiten, seine Größe, wird es nicht automatisch zu erweitern?Nur der Umsetzung Ihrer eigenen. Sie könnte verwenden Sie einen proxy-basierten Ansatz. Definieren Sie Ihre eigene Liste, die wird unterstützt durch eine
ArrayList
. Die interne Liste private. Auch eine einfache Implementierunglimit
Feld, das Standard-und auch über einen Konstruktor.Ihre Liste implementieren
List
, und für jede Methode, die ändert der internen Liste, inkrementiert und dekrementiert die Anzahl entsprechend. Wenn die Größe überschreitet die Grenze, werfen irgendeine Art von Ausnahme. So etwas wieMüssen Sie die Arbeit auf die Generika und denken Sie daran, unterstützen den Fällen, in denen mehrere Dinge auf einmal zugegeben
addAll
.ArrayList
implementiert wurde um uns zu erlauben, zu verlängern, die Größe von arrays dynamisch und ändern Sie dann Ihr Verhalten, so können wir das nicht mehr? Na janot not x
ist das gleiche wiex
, aber das ist eher sinnlos ist es nicht?ArrayList
Hinzugefügt, über ein einfaches array, so konnten wir nur mit dem array selbst, oder wenn wir brauchen, hinzufügen und co Funktionen ja nur sichern, indem Sie ein array wäre einfacher zu.Gut Sie konnten Erben von der Klasse
ArrayList
zum Beispiel, und implementieren Sie dieadd
Methode nicht in der Lage, die Vergangenheit einer gegebenen Menge von Elementen. Oder, noch besser, da Zeiger aus, indem Laf, verwenden Zusammensetzung:add
Methode könnte mehr Probleme schaffen, weil Sie abhängig werden von derArrayList
Umsetzung. Dies ist etwas, was Josh Bloch erwähnt in seinem Effektive Java - Buch.Verwenden
Collections.unmodifiableList(List<T> list)
. Das liefert eine generischeList<T>
Objekt, das wirftUnsupportedOperationException
wenn Sie versuchen, hinzufügen oder entfernen von Elementen.Werde ich mir wohl verbrannt, aber Sie können auch eine ArrayBlockingQueue für diese. Das bietet den Vorteil, in der Lage zu verwenden regelmäßige Sammlung Methoden.