Wie implementiere ich eine feste "Liste" in Java?

8

Da die Java-Kernbibliothek keine solche Sammlung hat, wäre ein Array die beste Option, besonders wenn man nicht auf Bibliotheken von Drittanbietern zurückgreifen möchte?

    
mre 23.01.2012, 17:09
quelle

8 Antworten

4

Ich würde eine Wrapper-Klasse um eine ArrayList schreiben, und in den Methoden add und addAll würde ich nach der Größe der Liste suchen, bevor ich neue Elemente hinzufüge. Wenn Sie die maximale Größe erreicht haben, können Sie eine Ausnahme auslösen (oder nichts tun, je nachdem, was Sie wirklich in Ihrem Code tun möchten).

Hier ist ein kurzes Beispiel:

%Vor%     
Laf 23.01.2012, 17:16
quelle
12

Arrays.asList (T. ..) Returns a fixed-size list backed by the specified array

%Vor%     
Aviram Segal 23.01.2012 17:11
quelle
5

Sie könnten ein Array oder ein ArrayList<E> verwenden, das mit der gewünschten Größe vorinitialisiert ist.

Wenn Sie die Erweiterung der Liste aktiv verhindern wollen, ist die Verwendung eines Arrays wahrscheinlich am einfachsten.

    
NPE 23.01.2012 17:11
quelle
3

Implementieren Sie einfach Ihre eigenen. Sie könnten einen proxybasierten Ansatz verwenden. Definieren Sie Ihre eigene Liste, die von einem ArrayList unterstützt wird. Machen Sie die interne Liste privat. Implementiere auch ein einfaches limit -Feld, das einen Standard hat und auch über einen Konstruktor gesetzt werden kann.

Ihre Liste wird List implementieren, und für jede Methode, die die interne Liste ändert, erhöht und dekrementiert die Zählung entsprechend. Wenn die Größe das Limit überschreitet, werfen Sie eine Ausnahme aus. Etwas wie

%Vor%

Sie müssen an den Generika arbeiten und daran denken, die Fälle zu unterstützen, in denen mehrere Dinge gleichzeitig hinzugefügt werden. addAll .

    
hvgotcodes 23.01.2012 17:13
quelle
2

Nun, Sie könnten beispielsweise von der Klasse ArrayList erben und die Methode add neu implementieren, um nicht in der Lage zu sein, eine bestimmte Anzahl von Elementen hinzuzufügen. Oder, noch besser als Zeiger von Laf, verwenden Sie composition:

%Vor%     
Tudor 23.01.2012 17:12
quelle
0

Verwenden Sie Collections.unmodifiableList(List<T> list) . Dies wird ein generisches List<T> -Objekt zurückgeben, das UnsupportedOperationException auslöst, wenn Sie versuchen, Elemente hinzuzufügen (oder zu entfernen).

    
gregm 23.01.2012 17:19
quelle
0

Ich werde wahrscheinlich gebrannt werden, aber Sie können auch eine ArrayBlockingQueue verwenden dafür. Dies bietet den Vorteil, dass Sie regelmäßig Collection -Methoden verwenden können.

    
Perception 23.01.2012 17:30
quelle
-1
%Vor%     
user6497465 22.06.2016 05:49
quelle

Tags und Links