Synchronisation + Vector/ArrayList/LinkedList

Status
Nicht offen für weitere Antworten.

-frank

Bekanntes Mitglied
ich habe ein programm mit mehreren threads, die auf diverse Listen zugreifen müssen. Mir geht es nun um die Wahl der Synchronisationsmöglichkeit und der das List-Interface implementierenden Klasse.

Synchronisation mittels...
1. Vector (ist bereits synchronisiert (allerdings nicht der Iterator))
2. java.util.Collections.synchronizedList(List...)
3. synchronisations-objekt

Listen:
1. Vector
2. ArrayList
3. LinkedList

ich bin mir nun nicht sicher, welche Kombination ich wählen soll. Google liefert dazu einige Diskussionen, zb diese hier: http://www.velocityreviews.com/forums/t132806-arraylist-vs-vector.html
Bei Vector sagen zb viele, dass die Klasse veraltet ist bzw. im Nachhinein ans Collection-Framework angepasst wurde und von daher nur verwendet werden sollte, wenn das Program auf alten JVMs laufen soll (das ist mir egal, java1.5 brauche ich sowieso). andere wiederum meinen, dass die automatische Synchronisation von Vector ein großer Vorteil ist und weniger Overhead hat als java.util.syncronizedList(List..). anderswo hab ich wieder gelesen, dass man die synchronisation sowieso immer über ein synch-objekt machen sollte. auch weil man dann für den synchronisierten zugriff auf mehrere objekte nur ein synchronisationsobjekt benötigt (--> weniger synchronisationsarbeit).
zum synchronisierten zugriff habe ich auch in diesem post: http://www.java-forum.org/de/viewtopic.php?t=44279&highlight= schon mal was geschrieben (allerdings keine antwort bekommen).

bezüglich linkedlist versus arraylist sehe ich in erster line mal den vorteil, dass linkedlist einfach einige praktische methoden anbietet wie getLast() und sowas. da meine Referenzen (bis jetzt) aber sowieso nur auf das List-Interface referenzieren, würde dieser Vorteil für mich wegfallen. Hat damit LinkedList keinen Vorteil mehr?
ArrayList soll ja schneller sein. Von dem, was ich über Arrays weiß, leuchtet mir auch ein, dass der Zugriff auf Elemente viel schneller sein muss (O(1) statt O(n)). Greift man aber seltener zu und verändert dafür relativ oft die Liste, sprich viele add/remove. sollte dann nicht linkedlist besser sein? (ich frage, weil bei meiner googlesuche in diversen foren fast immer zu arraylist geraten wurde (statt vector) und nie zu linkedlist).
 

Wildcard

Top Contributor
Wenn du wahlfreien Zugriff brauchst ist eine LinkedList nicht zu gebrauchen.
Für häufige add/remove Operationen scheidet die ArrayList aus.
Vector würde ich nicht nehmen.
 

-frank

Bekanntes Mitglied
Wildcard hat gesagt.:
Wenn du wahlfreien Zugriff brauchst ist eine LinkedList nicht zu gebrauchen.
Für häufige add/remove Operationen scheidet die ArrayList aus.

okay, das hilft mir schon mal insofern weiter als es eben doch gründe gibt, sich das zu überlegen (wie gesagt heißt es im netz meist einfach "nimm statt vector arraylist". linkedlist hab ich selten gelesen). bei mir ist es so, dass ich viele add/removes haben werde aber auch viele zugriffe. sehr viele zugriffe sind aber iterationen über alle elemente. allerdings habe ich auch etliche indexOf(Element) aufrufe. da ich die equals-Methode des objekts überscheibe und somit das "echte" objekte noch garnicht habe (also das entsprechende element in der liste), muss ich mir danach auch mit get(index) das element holen.

also ich habe alles drin. kommts einen dann wirklich auf die performance an, müsste man das problem wohl analysieren und testen, was in diesem fall schneller ist oder?
 

Wildcard

Top Contributor
-frank hat gesagt.:
Wildcard hat gesagt.:
Wenn du wahlfreien Zugriff brauchst ist eine LinkedList nicht zu gebrauchen.
Für häufige add/remove Operationen scheidet die ArrayList aus.

okay, das hilft mir schon mal insofern weiter als es eben doch gründe gibt, sich das zu überlegen (wie gesagt heißt es im netz meist einfach "nimm statt vector arraylist". linkedlist hab ich selten gelesen).
Der Grund ist einfach das Vector genauso wie ArrayList funktioniert, hier ist die Wahl der Implementierung also schon getroffen, daher braucht man keine LinkedList zu empfehlen.
Im EInzelfall muss man tatsächlich testen.
Iterationen über LinkedList und ArrayList sind vergleichbar schnell.
ArrayList bekommt Probleme wenn das interne Array umkopiert werden muss und LinkedList bekommt bei get(index) Probleme (da sie intern eine Iteration vom ersten Element ab starten muss).
 

-frank

Bekanntes Mitglied
achso... auf diese idee bin ich nicht gekommen. arraylist ist vector natürlich ähnlicher, deswegen...

okay, also so wies aussieht ist mein erstes problem gelöst, denn ich werde wie gesagt alle möglichen zugriffe und list-modifikationen haben. wenns da nicht eindeutig ist, was ich nehmen solle, dann teste ich das eben in zukunft in fällen, wo performance wichtig ist.

bleibt noch die frage der synchronisationsmethode. kann ich davon ausgehen, dass ein zusätzliches synchronisationsobjekt dann sinn macht, wenn man sich dadurch mehrere andere synchronisationen erspart, es aber egal ist, wenn man sowieso nur synchronisiert auf die Liste zugreifen will?
 

Wildcard

Top Contributor
-frank hat gesagt.:
bleibt noch die frage der synchronisationsmethode. kann ich davon ausgehen, dass ein zusätzliches synchronisationsobjekt dann sinn macht, wenn man sich dadurch mehrere andere synchronisationen erspart, es aber egal ist, wenn man sowieso nur synchronisiert auf die Liste zugreifen will?
synchronisiert wird immer mit einem 'synchronisationsobjekt'. Etwas anderes gibt es nicht.
 

-frank

Bekanntes Mitglied
Wildcard hat gesagt.:
synchronisiert wird immer mit einem 'synchronisationsobjekt'. Etwas anderes gibt es nicht.

was ich meinte, ist, dass ich entweder mit Collections.synchronizedList(..) eine synchronisierte Liste erzeugen kann, wo ich dann eben, wenn ich drüber iteriere, synchronized(list) {...} schreibe oder aber dass ich bei einer unsynchronisierten liste bleibe und bei jedem zugriff dafür ein synchronized(synchronizeListAccess) {..} schreiben kann.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
T Synchronisation einer Textdatei im Groupshare Allgemeine Java-Themen 1
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
K Threads - Swing - Synchronisation nötig? Allgemeine Java-Themen 8
K Thread Synchronisation Allgemeine Java-Themen 8
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
F Bluetooth / Synchronisation : Problem mit einer Bluetoothanwendung Allgemeine Java-Themen 3
T Project Synchronisation Allgemeine Java-Themen 4
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
B Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 10
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
H Thread Synchronisation. mutex.lock(); und mutex.unlock(); Allgemeine Java-Themen 4
S Synchronisation von Threads Allgemeine Java-Themen 7
T problem mit synchronisation Allgemeine Java-Themen 4
G Links zum Thema Synchronisation Allgemeine Java-Themen 7
H LRUMap und Synchronisation Allgemeine Java-Themen 5
S synchronisation einer Methode abhängig vom Parameter Allgemeine Java-Themen 10
S Threads und Synchronisation Allgemeine Java-Themen 3
A Synchronisation Datenquelle und Anwendung (Multi-User) Allgemeine Java-Themen 7
A Daten-Synchronisation Client <-> Datenquelle (DB) ? Allgemeine Java-Themen 6
C Synchronisation aber trotzdem parallel lesen Allgemeine Java-Themen 2
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
G JComponent in Vector - wie klonen? Allgemeine Java-Themen 7
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P Vector auf JTree Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
A Probleme mit Vector Allgemeine Java-Themen 6
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
J Vector - Wert ersetzen Allgemeine Java-Themen 14
J Vector - Boolean Allgemeine Java-Themen 24
M Vector zu einem byte[] Allgemeine Java-Themen 5
J Vector<Shape> Speichern [gelöst] Allgemeine Java-Themen 11
Y Array mit ID in Vector Allgemeine Java-Themen 6
T Vector <-> double Allgemeine Java-Themen 4
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
T ArrayList oder Vector als Parameter? Allgemeine Java-Themen 7
M Vector add() unchecked? Allgemeine Java-Themen 5
M Probleme und Zeitdruck: Kunden-DB (Vector) Allgemeine Java-Themen 13
T Vector Array Allgemeine Java-Themen 5
M Kunden-DB mit Vector Allgemeine Java-Themen 9
J Vector sortieren Allgemeine Java-Themen 3
M Vector - contain Allgemeine Java-Themen 13
C String und char[] / String[] und Vector Allgemeine Java-Themen 21
N Vector -> 2Diminsonaler Array Allgemeine Java-Themen 10
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
K Object nach Vector konvertieren Allgemeine Java-Themen 3
Z ResultSet in Array oder Vector schreiben! Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben