Hi zusammen,
ich verwende aktuell eine CopyOnWriteArrayList, zu der ich aber noch einige Fragen habe.
Ich habe verschiedene Beschriebungen zu diesem speziellen Datentyp gelesen.
Diese CopyOnWriteArrayList bietet sich bei mir an, da ich vorallem von dieser Liste lese und nur selten hinzufüge/entferne.
Allen Beschreibungen konnte ich leider keine einfach Implementierung entnehmen bzw. und wenn, dann waren diese sehr unterschiedlich.
In einem Fall wurde diese Liste bei hinzufügen/entfernen mit einem Lock versehen, bei einem anderem Beispiel nicht. Was ist nun richtig?
Hier kommt mal ein einfacher Beispiel Code:
Mein Container unterstützt 4 Operationen auf der CopyOnWriteArrayList.
Meine Frage ist nun:
Die Methoden, bei denen ich Modifikationen auf der CopyOnWriteArrayList durchführe, kann ich diese so implementieren wie in dem Beispiel, oder muss ich das anders implementieren?
ich verwende aktuell eine CopyOnWriteArrayList, zu der ich aber noch einige Fragen habe.
Ich habe verschiedene Beschriebungen zu diesem speziellen Datentyp gelesen.
Diese CopyOnWriteArrayList bietet sich bei mir an, da ich vorallem von dieser Liste lese und nur selten hinzufüge/entferne.
Allen Beschreibungen konnte ich leider keine einfach Implementierung entnehmen bzw. und wenn, dann waren diese sehr unterschiedlich.
In einem Fall wurde diese Liste bei hinzufügen/entfernen mit einem Lock versehen, bei einem anderem Beispiel nicht. Was ist nun richtig?
Hier kommt mal ein einfacher Beispiel Code:
Java:
import java.util.concurrent.CopyOnWriteArrayList;
public class MyContainer {
private CopyOnWriteArrayList<MyObjects> myObjectList;
public MyContainer() {
myObjectList = new CopyOnWriteArrayList<MyObjects>();
}
/**
* remove all operation.
*/
public void removeAll() {
MyObjects myObject = null;
for (int lIndex = myObjectList.size() - 1; lIndex >= 0; lIndex--) {
myObject = myObjectList.get(lIndex);
myObject.shutMeDown();
myObjectList.remove(lIndex);
}
}
public void removeOneObject(MyObjects myObjectToDelete) {
if (myObjectToDelete == null) {
return;
}
MyObjects myObject;
for (int lIndex = myObjectList.size() - 1; lIndex >= 0; lIndex--) {
myObject = myObjectList.get(lIndex);
if (myObject.equals(myObjectToDelete)) {
myObject.shutMeDown();
myObjectList.remove(lIndex);
break;
}
}
}
/**
* add operation.
*/
private void addNewMyObject() {
myObjectList.add(new MyObjects());
}
/**
* return one operation.
* @return
*/
private MyObjects getFreeObject() {
for (MyObjects myObject : myObjectList) {
if (myObject.isFree()) {
return myObject;
}
}
return null;
}
}
class MyObjects {
private boolean free = true;
public void shutMeDown() {
// shut me down
}
public boolean isFree() {
return free;
}
}
Mein Container unterstützt 4 Operationen auf der CopyOnWriteArrayList.
- Lösche alle Objekte
- Lösche ein Objekt
- Füge ein Objekt hinzu
- Hole ein Objekt
Meine Frage ist nun:
Die Methoden, bei denen ich Modifikationen auf der CopyOnWriteArrayList durchführe, kann ich diese so implementieren wie in dem Beispiel, oder muss ich das anders implementieren?