URL: https://www.overclockers.at/coding-stuff/java_collections_132132/page_1 - zur Vollversion wechseln!
Kann mir mal bitte jemand folgendes kleine C++ Beispiel in Java (1.3 oder 1.4) übersetzen? Ich kann nämlich nicht ganz glauben, dass es in Java nicht gehen soll, eine Map von "int" auf "String" zu machen.
Code:#include <string> #include <map> #include <iostream> using namespace std; int main() { map<int, string> mymap; mymap[1] = "eins"; mymap[8] = "acht"; mymap[3] = "drei"; mymap[10] = "zehn"; mymap[100] = "hundert"; map<int, string> map2 = mymap; for (map<int, string>::iterator it = map2.begin(); it != map2.end(); ++it) cout << it->first << " -> " << it->second << endl; return 0; }
Code:import java.util.HashMap; import java.util.Set; import java.util.Iterator; public static void main(String [] args) { HashMap myMap = new HashMap(); myMap.put(new Integer(1), "eins"); myMap.put(new Integer(8), "acht"); myMap.put(new Integer(3), "drei"); myMap.put(new Integer(10), "zehn"); myMap.put(new Integer(100), "hundert"); Set keySet = myMap.keySet(); for(Iterator it=keySet.iterator();it.hasNext();System.out.println(myMap.get(it.next()))); }
sorry dass ich frage - ich mach erst seit mitte oktober java, und bin derzeit scheinbar noch nicht soweit diverse ungereimtheiten verstehen (zb. scheint 1.4 einen parser-fehler zu werfen wenn in einem function/method-header als type eine selbstdefinerte klasse vorkommt... egal)Zitat von murcielagoCode:import java.util.HashMap; import java.util.Set; import java.util.Iterator; public static void main(String [] args) { HashMap myMap = new HashMap(); myMap.put(new Integer(1), "eins"); myMap.put(new Integer(8), "acht"); myMap.put(new Integer(3), "drei"); myMap.put(new Integer(10), "zehn"); myMap.put(new Integer(100), "hundert"); Set keySet = myMap.keySet(); for(Iterator it=keySet.iterator();it.hasNext();System.out.println(myMap.get(it.next()))); }
weil "int 1" kein objekt is, new Integer(1) aber schon und die map als key nur objekte nimmt.
ok, dank' dirZitat von murcielagoweil "int 1" kein objekt is, new Integer(1) aber schon und die map als key nur objekte nimmt.
gerne
aja, hab nicht gesehen dass er den key auch noch ausgeben will, dann so:
Code:public class MyMain { public static void main(String[] args) { HashMap myMap = new HashMap(); myMap.put(new Integer(1), "eins"); myMap.put(new Integer(8), "acht"); myMap.put(new Integer(3), "drei"); myMap.put(new Integer(10), "zehn"); myMap.put(new Integer(100), "hundert"); Set keySet = myMap.keySet(); for (Iterator it = keySet.iterator(); it.hasNext();) { Object key = it.next(); System.out.println(key.toString() + " -> " + myMap.get(key)); } } }
OK danke, offenbar ist Java wirklich so "bescheuert".
(btw, eine C++ map entspricht einer Java TreeMap, sonst sind die Keys nicht sortiert)
Komisch, dass man "new Integer(1)" schreiben muss, aber aus einem quoted String automatisch ein neues String-Objekt wird.
Aber angeblich ist das ja mit 5.0 alles viel besser.
Noch was: Wenn ich dazuschreibe
Code:myMap.put("haha", "hoho");
Sei nicht so gemein...Zitat von thatAls nächstes Java-bashing Projektwerde ich mal den Speicherbedarf einer ArrayList von 1000000 Integer-Objekten messen.
@that: wenn du in der schleife auf Integer zu casten versuchst ists klar, dass es dann schnalzt, wenn du aber nur den Key in ein Object holst und mit instanceof abfragst, dann kannst dir die exception auch sparen
ja, mit java 5 braucht man das nicht mehr.
@c++ compiler: tja, in c++ kann mans dann also nicht machen, in java kannst so aber jedes beliebige objekt (von jedem beliebigen typ) als key nehmen und in der selben map speichern.
Zitat von murcielago@that: wenn du in der schleife auf Integer zu casten versuchst ists klar, dass es dann schnalzt, wenn du aber nur den Key in ein Object holst und mit instanceof abfragst, dann kannst dir die exception auch sparen
@that: murcielago hat schon Recht, man kann die Keys schon mischen allerdings muss man dann der TreeMap "sagen", wie sie die Keys sortieren soll. Das macht man, indem man bei der Erstellung des Objekts einen Vergleicher () angibt:
Code:TreeMap m = new TreeMap(new Comparator() { public int compare(Object o1, Object o2) { if (o1 != null && o2 != null) return o1.toString().compareTo(o2.toString()); else throw new NullPointerException("Cannot compare null"); } });
@gue: Danke, wieder was gelernt. Sowas geht ja in C++ auch, hab ich aber bisher nie gebraucht. Aber es ist beruhigend dass es geht.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025