View Full Version : [FRAGE] - HashMaps auch prüfungsrelevant?
- TeMET_noSCE -
20-06-2004, 14:45
dass man sich mit arrayslists oder vectoren auskennen sollte is bei der vorbesprechung ja relativ deutlich rübergekommen, aber HashMaps hat Mr. Reiter nur einmal nebenbei erwähnt (und auf den Folien kommen sie auch mal vor). sind die jetzt auch für die prüfung wichtig oder ned?? (bei den ganzen threads über vergangene prüfungen sind hashmaps nämlich auch nie erwähnt worden...)
ich hab das so verstanden, dass man sich hauptsächlich mit arraylists und iteratoren auseinandersetzen sollte, da man mit diesen beiden das beispiel lösen können sollte. sicher kann man auch vectoren dazu verwenden, nur sind meiner meinung nach arraylists einfach zu handhaben.
- TeMET_noSCE -
20-06-2004, 16:14
so hab ich das auch verstanden. hoffentli hamma recht. thx :thumb:
nur wo liegt eigentlich der unterschied zwischen vectoren und arraylists.
iteratoren kann ich bei beiden verwenden, add, remove, ... gibts auch bei beiden...
derbrain
20-06-2004, 17:59
die handhabung ist soweit ich weiß identisch, nur sind arraylists nur für single-thread einsetzbar (also nicht mehrere zugriffe gleichzeitig), dafür aber schneller. vektoren sind auch für multi-thread einsetzbar, da sie synchronisiert arbeiten, das synchronisieren ist aber aufwendiger und daher langsamer. für uns ist multithread eh nicht relevant, also -> array-list verwenden ;-)
die handhabung ist soweit ich weiß identisch, nur sind arraylists nur für single-thread einsetzbar (also nicht mehrere zugriffe gleichzeitig), dafür aber schneller. vektoren sind auch für multi-thread einsetzbar, da sie synchronisiert arbeiten, das synchronisieren ist aber aufwendiger und daher langsamer. für uns ist multithread eh nicht relevant, also -> array-list verwenden ;-)
das ist nicht ganz richtig.
Mit dem synchronized hast du zwar recht: in einem vektor sind alle methoden synchronisiert, in einer ArrayList standardmässig nicht.
Es stimmt auch, das die aufrufe dadurch theoretisch langsamer werden.
in der Praxis können aktuelle Java VMs (so ab 1.4) aber überprüfen, ob ein objekt in mehreren threads verwendet wird. ist das nicht der fall, wird das synchronized einfach ignoriert.
Möchte man übrigens eine synchronizierte Liste haben, dann geht das ganz einfach so:
List list = java.util.Collections.synchronizedList(new ArrayList());
der einzig wirkliche unterschied zwischen Vector und ArrayList ist eigentlich nur, das Vector noch aus der Zeit vor dem Collections Framework (http://java.sun.com/j2se/1.4.2/docs/guide/collections/) stammt und daher noch einige methoden besitzt, die nicht mit den anderen Collections zusammenpassen (z.B. elementAt(int)).
Ob Du einen code wie diesen hier hast:
//bsp1:
List l = new Vector();
l.add(someObject);
l.add(someOtherObject);
l.add(someOtherObject2);
l.add(someOtherObject3);
oder einen wie diesen
//bsp2:
List l = new ArrayList();
l.add(someObject);
l.add(someOtherObject);
l.add(someOtherObject2);
l.add(someOtherObject3);
ist eigentlich völlig wurscht.
(es ist halt blöd, dass es zwei klassen gibt, die genau dasselbe machen. Darum wird allgemein empfohlen, den Vector nicht mehr zu benutzen.)
probleme kann es aber geben, wenn du sowas machst:
//bsp 3:
...
Vector v = new Vector();
...
v.addElement(someObject);
v.addElement(someOtherObject);
v.addElement(someOtherObject2);
v.addElement(someOtherObject3);
...
jetzt kommst du vielleicht irgendwann mal drauf, das in deinem program unter umständen eine verkettete Liste effizienter ist als eine sequentielle liste.
in den ersten zwei beispielen könntest du jetzt einfach den code an einer einzigen stelle ändern:
List l = new LinkedList(); //statt List l = new ArrayList();
l.add(someObject);
l.add(someOtherObject);
l.add(someOtherObject2);
l.add(someOtherObject3);
bei beispiel 3 geht das aber nicht mehr.
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.