IT-Kaetzchen Geschrieben 11. März 2014 Geschrieben 11. März 2014 Hi Leute, folgendes... Meine Aufgabe lautet: "Für eine Kontaktliste sollen Name, Adresse, Telefonnummer und Emailadresse einer Person in einer HashMap gespeichert werden. Diese sollen in einer ArrayList vorgehalten werden. Erstellen Sie die besagte HashMap und füllen Sie sie mit Daten für drei Personen." Ich habe bereits zwei Klassen erstellt. Klasse HashTest: import java.util.*; public class HashTest { public HashTest() { } public static void main(String[] args) { Map<String, ArrayList<Person>> kontaktListe = new HashMap<String,ArrayList<Person>>(); ArrayList<Person> kontaktDaten = new ArrayList<Person>(); kontaktDaten.add(0, new Person("Daniel", "Daniel@aol.de", "08315364", "Memminger Straße 100", "Kempten")); kontaktDaten.add(1, new Person("Andreas", "andy@gmx.de", "0833196870", "Hauptstraße 10a", "Memmingen")); kontaktDaten.add(2, new Person("Isabell", "isi_bell@web.de", "089775361", "Theresienstraße 5", "München")); kontaktListe.put("myKey", kontaktDaten); System.out.println(kontaktListe); //System.out.println() zum Testen der ArrayList! /* System.out.println("Person 1:"); System.out.println("Name: " + kontaktDaten.get(0).getM_name()); System.out.println("E-Mail: " + kontaktDaten.get(0).getM_eMail()); System.out.println("Telefonnummer: " + kontaktDaten.get(0).getM_phone()); System.out.println("Straße: " + kontaktDaten.get(0).getM_street()); System.out.println("Ort: " + kontaktDaten.get(0).getM_wohnort()); */ } } Klasse Person: public class Person { private String m_name; private String m_eMail; private String m_phone; private String m_street; private String m_wohnort; public Person() { } public Person(String name, String eMail, String phone, String street, String wohnort){ m_name = name; m_eMail = eMail; m_phone = phone; m_street = street; m_wohnort = wohnort; } //Getter und Setter public String getM_name() { return m_name; } public void setM_name(String m_name) { this.m_name = m_name; } public String getM_eMail() { return m_eMail; } public void setM_eMail(String m_eMail) { this.m_eMail = m_eMail; } public String getM_phone() { return m_phone; } public void setM_phone(String m_phone) { this.m_phone = m_phone; } public String getM_street() { return m_street; } public void setM_street(String m_street) { this.m_street = m_street; } public String getM_wohnort() { return m_wohnort; } public void setM_wohnort(String m_wohnort) { this.m_wohnort = m_wohnort; } public static void main(String[] args) { new Person(); } } Mein Problem liegt jetzt darin, dass ich nicht weiß, wie ich die ArrayList in meine HashMap fülle. Ich würde die Methode .put() nutzen, weiß aber nicht was mit "key" und "value" gemeint ist. Hat mir jemand eine Idee, wie ich das löse? Ich hab schon geoogelt, aber nichts gefunden, mit dem ich was anfangen kann Danke schon mal Zitieren
p_krger Geschrieben 11. März 2014 Geschrieben 11. März 2014 (bearbeitet) Ich weiß, kann dir eigentlich jeder sagen und ich mache es mir einfach: HashMap (Java Platform SE 7 ) Eine gute Erklärung Eine HashMap dient zum speichern von Key-Value (Schlüssel-Wert) Paaren. Das heisst man gibt einen Schlüssel an und kann zu diesem Schlüssel einen Wert abspeichern und zu genau diesem Schlüssel auch den Wert wieder aus der HashMap herausholen. Ein Schlüssel kann ein beliebiges Objekt sein und ist meist eine Object Id, Speicheradresse oder ein String. Wichtig ist jedoch, dass ein Schlüssel eindeutig ist, sodass niemals ein Schlüssel für zwei Werte exisitiert. Technisch funktioniert die HashMap so, dass aus dem Schlüssel ein Hash-Wert berechnet wird der als Adresse in einer Tabelle dient wo der Wert abgespeichert wird. Das berechnen eines solchen Hashs ist nicht immer leicht, aber Java bietet standardmäßig ein recht solides Verfahren für die meisten primitiven Datentypen (die Methode hash() in Object dient genau dazu und wird in String etc. überschrieben). Eine gute Einführung in Hashwerte kann auf der Wikipedia nachgelesen werden. Quelle: Java HashMap Hoffentlich hilft es dir , Edit: http://www.tutorials.de/java-grundlagen/336903-hashmap.html Bearbeitet 11. März 2014 von p_krger Zitieren
IT-Kaetzchen Geschrieben 11. März 2014 Autor Geschrieben 11. März 2014 Danke schonmal, aber leider bringt mir das nichts. Ich hab schon alles mögliche ausprobiert.. nichts funktioniert. Ich weiß nicht wie ich das was ich in der ArrayList habe, in die HashMap reinspeichern soll. Wenn ich schreibe: kontaktListe.put("MyKey", kontaktDaten); Dann gibt er mir in der Konsole folgendes aus: {myKey=[Person@42e816, Person@9304b1, Person@190d11]} Ich will aber das ausgeben, was in jedem einzelnen Array steht. Also "Daniel" .. usw. Zitieren
p_krger Geschrieben 11. März 2014 Geschrieben 11. März 2014 Erfolgt beim Schreiben in ein Array nicht so eine Typkonvertierung? Ich lasse mir die Inhalte meiner Array immer über ganz billige for-Schleifen ausgeben, sodass ich wirklich jeden Wert erwische. Je nachdem, was du für eine Arraylist hast kannst du zB .toString() oder solche Methoden benutzen. Aber warte mal, ist es überhaupt möglich eine Hashmap über ein String und eine Arraylist zu deklarieren? Es heißt ja: ein Wert -> eine Zuordnung. Wichtig ist jedoch, dass ein Schlüssel eindeutig ist, sodass niemals ein Schlüssel für zwei Werte exisitiert. Edit: Habe hier noch etwas gefunden: http://stackoverflow.com/questions/960807/hashmapkey-string-value-arraylist-returns-an-object-instead-of-arraylist Zitieren
IT-Kaetzchen Geschrieben 11. März 2014 Autor Geschrieben 11. März 2014 Erfolgt beim Schreiben in ein Array nicht so eine Typkonvertierung? Ich lasse mir die Inhalte meiner Array immer über ganz billige for-Schleifen ausgeben, sodass ich wirklich jeden Wert erwische. Je nachdem, was du für eine Arraylist hast kannst du zB .toString() oder solche Methoden benutzen. Aber warte mal, ist es überhaupt möglich eine Hashmap über ein String und eine Arraylist zu deklarieren? Es heißt ja: ein Wert -> eine Zuordnung. Edit: Habe hier noch etwas gefunden: java - HashMap(key: String, value: ArrayList) returns an Object instead of ArrayList? - Stack Overflow Ich erkenne leider nicht was dictCode sein soll... Ich blick gar nicht mehr durch. Ein Klassenkamerade sagt, dass das ganze wenig Sinn macht, weil ArrayList und HashMap sich ziemlich ähnlich sein sollen. Beide speichern mehrere Werte vom selben Typ... Zitieren
p_krger Geschrieben 11. März 2014 Geschrieben 11. März 2014 Ich erkenne leider nicht was dictCode sein soll... Naja, das ist in dem Fall nur dem User seine Variable, die er eben so genannt hat. Ich bastel mit deinen Code mal in Eclipse sein und untersuche das genauer, vielleicht find ich da eine Lösung Zitieren
IT-Kaetzchen Geschrieben 11. März 2014 Autor Geschrieben 11. März 2014 Das ist wirklich lieb. Danke dir Zitieren
IT-Kaetzchen Geschrieben 11. März 2014 Autor Geschrieben 11. März 2014 Hab den Fehler gefunden. Ich habs nicht richtig gelesen. Mein Tutor möchte von mir, dass ich drei Hashmaps mache und diese dann in eine ArrayList speicher.. aber trotzdem danke! Zitieren
p_krger Geschrieben 11. März 2014 Geschrieben 11. März 2014 Also ich versuche es einmal zu erklären - und ich hoffe, ich habe es selber richtig kapiert : Hashmap funktioniert so, dass du einem Schlüssel einen eindeutigen Wert zuordnest: Key -> Value Person 1 -> Peter Person 2 -> Paul Person 3 -> Maria Was ich denke, was ich glaube, was du versuchst ist folgendes: Key -> Value Person 1 -> "Daniel", "Daniel@aol.de", "08315364", "Memminger Straße 100", "Kempten" Person 2 -> "Andreas", "andy@gmx.de", "0833196870", "Hauptstraße 10a", "Memmingen" Person 3 -> "Isabell", "isi_bell@web.de", "089775361", "Theresienstraße 5", "München" oder anders geschrieben: Key -> Value Person 1 -> kontaktDaten(0) [hier steht der Daniel drin] Person 2 -> kontaktDaten(1) [hier steht der Andreas drin] Person 3 -> kontaktDaten(2) [und hier die Isabell] Was ich nun herausgefunden habe, ist, dass du mit dieser Schleife deine drei Personen in deine Map schreiben kannst: for (int i = 0; i < kontaktDaten.size(); i++) { kontaktListe.put("Person " + i, kontaktDaten.get(i)); } Das erkenne ich daran, dass danach die System.out.println(kontaktListe.size()); 3 Einträge ausspuckt. Außerdem kannst du nun sehen, dass deine drei Personen ordentlich abgespeichert wurden und dir mit System.out.println(kontaktListe); im Rohdatenformat oder sowas ekliges diese anzeigen lassen: {Person 0=package.Person@72b0f2b2, Person 2=package.Person@3f0dbef1, Person 1=package.Person@1f72e08e} Du siehst, du hast dort drei Keys (Person 0, Person 2 und Person 1) und ihnen ihre Einträge zugeordnet. Sorry, ich habe nun einen Termin und kann dir daher nicht weiter helfen. Ich hoffe aber, dass du das jetzt allein schaffst und wünsch dir viel Erfolg bei deiner Aufgabe Zitieren
p_krger Geschrieben 11. März 2014 Geschrieben 11. März 2014 Hab den Fehler gefunden. Ich habs nicht richtig gelesen. Mein Tutor möchte von mir, dass ich drei Hashmaps mache und diese dann in eine ArrayList speicher.. aber trotzdem danke! Oh zu spät gesehen, egal Dann ist es eben so, viel Spaß Edit: stimmt, so rum wäre es auch einfacher finde ich... naja gut Zitieren
IT-Kaetzchen Geschrieben 11. März 2014 Autor Geschrieben 11. März 2014 Oh zu spät gesehen, egal Dann ist es eben so, viel Spaß Edit: stimmt, so rum wäre es auch einfacher finde ich... naja gut Ja so ist es viiiiiiiiiiiel einfacher und ich muss keine Klasse Person erstellen xD Alles in eine Klasse. Zitieren
p_krger Geschrieben 11. März 2014 Geschrieben 11. März 2014 Ja so ist es viiiiiiiiiiiel einfacher und ich muss keine Klasse Person erstellen xD Alles in eine Klasse. Hauptsache erstmal alle verwirren und mich ne Stunde überlegen lassen jaa jaa Zitieren
IT-Kaetzchen Geschrieben 11. März 2014 Autor Geschrieben 11. März 2014 Ich hatte aber auch ne Lösung noch zu der anderen Aufgabenstellung (bzw. zur falschen Aufgabenstellung).. In der Klasse Person hat sich nichts mehr geändert. import java.util.*; public class HashTest { public HashTest() { } public static void main(String[] args) { HashMap<String, ArrayList<Person>> kontaktListe = new HashMap<String,ArrayList<Person>>(); ArrayList<Person> kontaktDaten = new ArrayList<Person>(); kontaktDaten.add(0, new Person("Daniel", "Daniel@aol.de", "0831/5364", "Memminger Straße 100", "Kempten")); kontaktDaten.add(1, new Person("Andreas", "andy@gmx.de", "08331/96870", "Hauptstraße 10a", "Memmingen")); kontaktDaten.add(2, new Person("Isabell", "isi_bell@web.de", "089/775361", "Theresienstraße 5", "München")); kontaktListe.put("myKey", kontaktDaten); System.out.println("Person 1:"); System.out.println("Name: " + kontaktListe.get("myKey").get(0).getName()); System.out.println("E-Mail: " + kontaktListe.get("myKey").get(0).geteMail()); System.out.println("Telefonnummer: " + kontaktListe.get("myKey").get(0).getPhone()); System.out.println("Straße: " + kontaktListe.get("myKey").get(0).getStreet()); System.out.println("Wohnort: " + kontaktListe.get("myKey").get(0).getWohnort()); System.out.println(""); System.out.println("Person 2:"); System.out.println("Name: " + kontaktListe.get("myKey").get(1).getName()); System.out.println("E-Mail: " + kontaktListe.get("myKey").get(1).geteMail()); System.out.println("Telefonnummer: " + kontaktListe.get("myKey").get(1).getPhone()); System.out.println("Straße: " + kontaktListe.get("myKey").get(1).getStreet()); System.out.println("Wohnort: " + kontaktListe.get("myKey").get(1).getWohnort()); System.out.println(""); System.out.println("Person 3:"); System.out.println("Name: " + kontaktListe.get("myKey").get(2).getName()); System.out.println("E-Mail: " + kontaktListe.get("myKey").get(2).geteMail()); System.out.println("Telefonnummer: " + kontaktListe.get("myKey").get(2).getPhone()); System.out.println("Straße: " + kontaktListe.get("myKey").get(2).getStreet()); System.out.println("Wohnort: " + kontaktListe.get("myKey").get(2).getWohnort()); System.out.println(""); } } Ekelhaft, aber es funktioniert! Zitieren
IT-Kaetzchen Geschrieben 12. März 2014 Autor Geschrieben 12. März 2014 Omg, töte es! o0 Na, sei mal nicht so böse hauptsache es funktioniert Zitieren
Goulasz Geschrieben 12. März 2014 Geschrieben 12. März 2014 Na, sei mal nicht so böse hauptsache es funktioniert Und genau mit der Einstellung sitzt du irgendwann im Beruf nach 3 Wochen im Codereview, checkst deine Metriken und weinst dich nachts in den Schlaf, weil du die nächsten 2 Wochen mit Refaktorisierung und Dokumentation verbringst, damit deine Kollegen dir nicht den Kopf abreißen . Zitieren
IT-Kaetzchen Geschrieben 12. März 2014 Autor Geschrieben 12. März 2014 Und genau mit der Einstellung sitzt du irgendwann im Beruf nach 3 Wochen im Codereview, checkst deine Metriken und weinst dich nachts in den Schlaf, weil du die nächsten 2 Wochen mit Refaktorisierung und Dokumentation verbringst, damit deine Kollegen dir nicht den Kopf abreißen . Ja das wird selbstverständlich auch meine Einstellung bleiben:upps Ich bin im 2. Lehrjahr und bin gerader mal ein paar Tage in dieser Abteilung, in der programmiert wird. Das was man in der Schule lernt, bringt ja sowieso fast nichts. UND es ist ja nicht mal das richtige Programm. Ich hab das, was eigentlich verlangt war, auch noch gemacht und das sieht okay aus. Dafür, dass ich eigentlich keine Ahnung vom programmieren habe find ich das echt ok! Zitieren
p_krger Geschrieben 12. März 2014 Geschrieben 12. März 2014 (bearbeitet) Ja nein das sollte auch glaube ich keine Beleidigung oder sowas sein, sondern nur ein gut gemeinter Rat. Jeder Coder entwickelt im Laufe seiner Laufbahn seinen eigenen Stil. Bin auch erst im zweiten Lehrjahr und fange später auch hier bei den Programmierern an und war auch schon länger und öfter in der Abteilung, sodass mir durchaus die Grundstilistiken bekannt sind. Lass dich davon nicht unterkriegen, wenn andere hier Power-Codes schreiben, die voll abgespaced aussehen wenn du sagst, dass du erst seit ein paar Tagen in der Programmierung sitzt und es vielleicht auch nicht deine Fachrichtung ist (?) und von dir behauptest, dass du eigentlich keine Ahnung davon hast: dein Programm läuft doch, also jeder fängt mal klein an Edit: wichtig ist mir zB nur, dass man wissbegierig und neugierig bleibt und nach wie vor offen für alles ist (fachlich gesehen). Bearbeitet 12. März 2014 von p_krger Nachtrag Zitieren
Goulasz Geschrieben 12. März 2014 Geschrieben 12. März 2014 Ich gebe dir nur den Rat, so früh wie möglich darauf zu achten, sauberen Code zu produzieren. Ich habe selbst in einer 8-Mann-Firma mit fragwürdiger Ethik in puncto Clean Coding meine Ausbildung absolviert und kämpfe heute damit, gewisse Marotten und Gewohnheiten wieder raus zu bekommen. Glaub mir, das ist kein Spaß. Investier die Zeit lieber direkt und so früh wie irgend möglich. Entwickler sind faul und suchen den Weg des geringsten Widerstands, aber wenn es auf Kosten des Les- und Wartbarkeit geht, ist Schluss mit lustig. Das war weniger als Anpöbeln, sondern eher als Rat gemeint. Mit ein bisschen "Zwischen den Zeilen lesen" und Beachtung des ";)" hätte man die Intention ggfs. auch erkannt. Gruß, Goulasz P.S.: Java ist blöd, komm zu .NET, wir haben Kekse.^^ Zitieren
IT-Kaetzchen Geschrieben 12. März 2014 Autor Geschrieben 12. März 2014 Dann hab ich das wohl falsch verstanden. Verzeiht mir. Ich bin eine Frau, ich interpretiere gerne xD Ja ich werde mir in Zukunft viel Mühe geben. Ich denke mein 'richtiges' Programm sieht auch viel besser aus Werde es posten sobald ich fertig bin und das Netzwerk auf der Arbeit nicht mehr so rum spinnt Zitieren
p_krger Geschrieben 25. März 2014 Geschrieben 25. März 2014 Werde es posten sobald ich fertig bin und das Netzwerk auf der Arbeit nicht mehr so rum spinnt Und wie läuft es? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.