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).
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).