PDA

View Full Version : [FRAGE] - ArrayList - Object per Attribut identifizieren


quarx
13-06-2004, 20:59
Hi All !

Folgende Situation:
Ich habe mehrere Objekte gleichen Typs erzeugt und in einer Arraylist abgespeichert. Jetzt will ich ein bestimmtes Object bearbeiten das sich nur durch ein Attribut von den anderen unterscheidet.
Wie kann man nun dieses aus der Arraylist zum bearbeiten auslesen ?
Irgendwie so (http://hades.gothic.at/iforum/images/smilies/confused.gif):

Arraylist: "terme"
Objecttypname: "term"

term oneterm = terme.get(terme.indexOf(oneterm.attribut == 'x'));

plz help, not functioning

crag
13-06-2004, 21:44
Hi All !

Folgende Situation:
Ich habe mehrere Objekte gleichen Typs erzeugt und in einer Arraylist abgespeichert. Jetzt will ich ein bestimmtes Object bearbeiten das sich nur durch ein Attribut von den anderen unterscheidet.
Wie kann man nun dieses aus der Arraylist zum bearbeiten auslesen ?
Irgendwie so (http://hades.gothic.at/iforum/images/smilies/confused.gif):

Arraylist: "terme"
Objecttypname: "term"

term oneterm = terme.get(terme.indexOf(oneterm.attribut == 'x'));

plz help, not functioning

wie wärs wenn du dir ne such methode schreibst, die einfach das bestimmte objektattribut aller objekte mit dem such-attribut vergleicht? wenn bei einem objekt dann das attribut gleich dem such-attribut ist, gibt er die position an der sich das objekt befindet zurück. mit ner for schleife zb: das i, wo er das gesuchte objekt findet, returnierst du dann

term oneterm = terme.get( suchePos(oneterm.attribut) );

quarx
13-06-2004, 22:42
Danke, ich werds versuchen. /* edit: eh ne, ich weis ja nicht wie ich das Object aktiviere, weil das sind incompatible types:
term oneterm = terme.get(index); */
Habs noch so probiert:

Iterator it = terme.iterator();
term oneterm = it.next();

Doch das geht auch nicht, weil next() ein Object zurückliefert ?
Wohl weil es eben kein term-Object sein muss ?

rck
13-06-2004, 23:55
Danke, ich werds versuchen.

Na geh, schon das ArrayList Tutorial (http://www.kiesler.at/article38.html) angesehen? Ja?

Davon abgesehen hilft Dir vielleicht eine Schleife folgender Bauart:


it=al.iterator();

while(it.hasNext()) {
Instruction i=(Instruction)it.next();

if(i.matches(ch)) {
i.disassemble(ch);
return;
}
}


(das ist übrigens frisch aus meinem Praktikum entnommen :-))

quarx
14-06-2004, 00:14
ahhhhhhhhhhhhhhjaaaaaa, (term) http://hades.gothic.at/iforum/images/smilies/rolleyes.gif

Habs gelesen, auch im Buch, da schaltet was nicht richtig, ajiii ....

thx

rck
14-06-2004, 01:24
ahhhhhhhhhhhhhhjaaaaaa, (term)

(term) heißt neudeutsch "Typecasting". ;-) Viel Spaß damit // René!

AntiBit
14-06-2004, 02:24
Statt der ArrayList eine Hashtable verwenden.

Hashtables speichern Objekte anhand von keys und das gesuchte Objekt lässt sich dann auch entsprechend einfach mittels des entsprechenden keys wieder herausfinden.

Im Pseudocode würde das etwa so aussehen:

Hashtable h = new Hashtable();

// Einfügen
DeinObject o = new DeinObject();

String key = "objectkey:"+o.attributwert;

h.put(key, o);

// Rausholen
String key = "objectkey:attributwert";

if(h.containsKey(key))
{
DeinObject o = (DeinObject) h.get(key);
}


So könnte mans auch machen, dafür eignen sich die Dinger gut. Oder du implementierst halt eine
eigene Suchmethode die die ArrayList in ner Schleife durchläuft und das Objekt mit dem gesuchten Attributwert zurückliefert.

mfg,
zero

quarx
14-06-2004, 15:33
Habe noch ein paar andere Fragen zum ListIterator. Rutscht man nach set() bzw remove() immer eine Position in der Liste zurück?
Anders ausgedrückt, angenommen die Reihenfolge der Arraylist sieht so aus:
A B C D E

set():
Angenommen ich befinde mich gerade auf der Position des Elementes B.
Wenn ich jetzt B mit it.set(X) ersetzte, befinde ich mich danach auf Position des Elementes X oder A?

remove():
Befinde ich mich auf Position B und mache it.remove(), dann sieht die Liste so aus: A C D E
Ist der Iterator nun auf C oder A?


zu add():
Reihe: A B C D E
Position: B
Mache ein it.add(X)
==>
Reihe: A X B C D E
Position: X oder http://hades.gothic.at/iforum/images/smilies/confused.gif

rck
14-06-2004, 17:52
Habe noch ein paar andere Fragen zum ListIterator.

Nein, ganz falsch! :D

Der Iterator ist nur zum Lesen da und hat heiße 2 Funktionen: hasNext() und next(). Mehr nicht.

Die ArrayList als solche ist "stateless". Heißt: Wenn Du ein add(x) machst, führt die ArrayList das aus. Merkt sich aber nicht, dass Du an Stelle x eingefügt hast. Bei set genauso.

Hoffe, zu Deiner Verwirrung beigetragen zu haben :verycool: // René!

quarx
14-06-2004, 18:38
Ich glaub du hast da was verwechselt, sprach vom ListIterator und der kann laut "Java ist auch eine Insel" mehr, nämlich auch u.a.
add(); set();

Also ich hab das Bsp "Symolisches Differenzieren". Da hat man eine Funktion mit mehreren Termen, wenn ein * dazwischen steht, soll man die Produktregel anwenden. Also angenommen der ListIterator befindet sich auf Position B in der Reihe:
" A B C D "
Ich soll zB jetzt B * C ausrechenen und einfügen. Hab das so gemacht:

it.set(B'); it.next(); it.set(C); it.add(B); it.add(C');

Und ich hoffe ich hab jetzt:
" A B' C B C' D "
und befinde mich auf Position C' .

Wenn ich den Iterator initialisiere, und dann das erste Element mit it.next() hol, gibt er mir dann wirklich das erste(index 0) oder schon das zweite(index 1) ?

Wenn die Spezifikation eindeutiger wäre, wär ich wesentlich weniger verwirrt, dass is nur das kleinste Problem http://hades.gothic.at/iforum/images/smilies/rolleyes.gif

greez