ich habe eine abstrakte klasse genannt MediaTyp. Davon erbe ich z.b. andere Klassen wie DVD,MP3,CD,WMA etcc
Nun instanziiere ich objekte dieser Klassen die auch bestimmte attribute haben. Diese Objekte füge ich einer Klasse hinzu die von ArrayList erbt. Wenn ich nun einen Button habe "delete DVD" sollte irgendein Objekt vom typ DVD gelöscht werden. MUss ich dafür jedes der evtl. 10000 Objekte in der List auf den Type überprüfen und dann ggf. löschen?
MUss ich dafür jedes der evtl. 10000 Objekte in der List auf den Type überprüfen und dann ggf. löschen?
Auch wenn die Frage etwas unpräzise war: Vermutlich MUSS man das Objekt suchen. Selbst wenn man "list.remove(object)" aufruft, wird intern im schlimmsten Fall die gesamte Liste durchsucht.
Je nachdem, worum es geht, kann vielleicht eine Map helfen - wenn z.B. die DVD mit ihrem Namen angesprochen werden kann/soll:
Code:
Map<String, MediaType> map = new HashMap<String, MediaType>();
map.put("Bla", new DVD("Bla"));
map.put("Blu", new DVD("Blu"));
map.put("Ble", new DVD("Ble"));
map.remove("Blu"); // Geht schnell
wenn ich jetzt ein normales Array benutzen möchte vom Typ Recording welches eine abstrake Klasse ist und vererbte klassen wie dvd,mp3 etc hat, wie lösche ich z.b. objekte aus dem Array, wenn ich vor und zurückspringen kann und jedes mal die objekte attribute ausgegeben werden z.B. artist, name, band, preis etc... Hinzufügen geht mit normalem Array nur das Löschen nicht... denn wenn ich objekt mit index 8 im Array löschen würde, und ich springe mit dem next Button von index 8 auf 9 und nach 7 zurück. Kann ich den index prüfen ob da ein objekt ist?
Natürlich kannst du in einem Array eine Stelle "löschen"
array[42] = null
und du kannst auch testen, ob die Stelle leer ist:
if(array[42] == null) ...
Aber wenn du andauernd löschst, sieht dein Array bald aus wie ein Käse, und die Verwaltung deiner Löcher ist alles andere als hübsch. Bleib bei der ArrayList, da werden die Lücken automatisch geschlossen, die Größe automatisch angepasst usw.
Natürlich kannst du in einem Array eine Stelle "löschen"
array[42] = null
und du kannst auch testen, ob die Stelle leer ist:
if(array[42] == null) ...
Aber wenn du andauernd löschst, sieht dein Array bald aus wie ein Käse, und die Verwaltung deiner Löcher ist alles andere als hübsch. Bleib bei ArrayList, da werden die Lücken automatisch geschlossen, die Größe automatisch angepasst usw.