Java HashMap Tutorial - Java Programmieren Lernen - 42

Поделиться
HTML-код
  • Опубликовано: 24 янв 2025

Комментарии • 32

  • @JonasKeil
    @JonasKeil  3 года назад +1

    ❤Abonniere um kein weiteres Video zu verpassen:
    ruclips.net/channel/UCPicjtG0UwZ7n5HrpqRw-Vw
    📢Trete dem Discord Channel bei und werde teil der Community! :
    discord.gg/BmSNstWd
    🚀Mit dieser Playlist wirst DU zum Java-PROFI:
    ruclips.net/p/PLO-P6W97sI0Q-o0oZy8NeUgi0s5WKK8IV

  • @lyn8964
    @lyn8964 2 года назад +22

    Beste Java Videos für Studierenden an Deutscher Hochschule, ich werde alle deine Videos anschauen! unglaublich hilfreich! Danke:)

    • @JonasKeil
      @JonasKeil  2 года назад

      Danke für das tolle Feedback! 😁🙌🏻

    • @JesajaBednarzTennis
      @JesajaBednarzTennis 2 года назад +1

      kann schon viel muss ich sagen ^^

  • @obi-wankenobi7736
    @obi-wankenobi7736 8 месяцев назад +1

    Abend. Ich weiß nicht, ob du diesen Kommentar sehen wirst, aber deine Videos sind echt genial! Ich habe gerade im Studium in Info Java und mit deinen Beiträgen hilfst du mir wirklich sehr! Danke :)

  • @bittemitextrascharf
    @bittemitextrascharf Год назад

    Krass angenehme Stimme und hat mir echt weitergeholfen, Danke! 👏🔥

  • @Zuschauer19
    @Zuschauer19 2 года назад

    Danke für die super Erklärung. Genau das habe ich gesucht.

  • @simi8260
    @simi8260 Год назад

    Danke dir. Sehr hilfreiches Video!

  • @tomxle6278
    @tomxle6278 2 года назад +1

    Super erklärt, danke👌🏽👌🏽👌🏽

  • @theBakajaro
    @theBakajaro 3 года назад +3

    Dabke für den Aufwand!

  • @zahltag104
    @zahltag104 2 года назад +4

    Kleiner Tipp:
    Wenn man direkt die Werte in der Zeile, bei der das Objekt erzeugt wird, eintragen möchte, dann kann man die statische Methode Map.of nutzen.
    Also
    Map capitals = new HashMap(Map.of(''Frankreich'', ''Paris'', ''Russland'', ''Moskau''));
    Die Map wird mutabel sein. Für eine immutable Map dann einfach direkt nach dem = ein Map.of nutzen :)

    • @JonasKeil
      @JonasKeil  2 года назад +2

      Guter Hinweis 😁👍🏻

  • @marmont8005
    @marmont8005 Год назад

    Wenn wir der Map spezifische Datentypen geben möchten müssen wir Wrapper Typen benutzen. Map bedeutet, dass wirr Objekte vom Wrapper-Typ Integer und String verwenden. Da Strings schon Objekte sind gilt es in diesem Fall nur für die int Werte.
    Falls ich mich irre, bitte um Korrektur.
    :)

  • @mondzahn
    @mondzahn 2 года назад +1

    Abo ist da
    Einfach gute videos

    • @JonasKeil
      @JonasKeil  2 года назад +1

      Wow, vielen Dank für das Kompliment und danke für das Abo😁👊🏻

  • @jeudyl
    @jeudyl Год назад

    🎉🎉❤

  • @DancerVlt69
    @DancerVlt69 2 года назад

    Wenn man dein Bsp mit den Postleitzahlen tatsächlich nutzen wollte/müsste, hätte man ein 'kleines' Problem. Da es in Dtl. - und vermutlich nicht nur - durchaus den Fall gibt, dass sich mehrere Orte eine PLZ 'teilen' - siehe die PLZ 16727 - lässt sich eine (Hash)Map ja dann nicht mehr nutzen. Oder gibt's da eine 'Notlösung' ?
    Und das Andere was mir aufgefallen ist, hat sich schon in den älteren Kommentaren geklärt: PLZ's als String statt als Int speichern, da es sonst mit der führenden Null ein Problem gibt.

  • @Michael-wh4my
    @Michael-wh4my 2 года назад +1

    Kurze frage: mich verwirrt immer ein bisschen wieso man zb Map = Hashmap schreibt, und nicht direkt Hashmap = Hashmap.
    Durch die erste weise verliert man doch im Grunde nur die fähigkeiten der hashmap oder man kann ja nur die eigenschaften des interfaces map benutzen

    • @JonasKeil
      @JonasKeil  2 года назад +1

      Hey miho, das ist eine gute Frage. Es geht um Grunde darum, die genaue Implementierung einer Map für andere Klassen / Methoden unsichtbar zu machen. Wie du meintest verfügt eine HashMap über mehr Methoden als eine Map und man verliert diese Methoden durch die Schreibweise Map = HashMap. Dann sind wir schon gesagt nur die Methoden verfügbar, die von der also definiert wurden.
      Der große Vorteil an dieser Schreibweise ist aber, dass andere Methoden, die z.B. eine Map als Parameter erwarten oder Klassen, denen im Konstruktor eine Map übergeben wird nicht wissen müssen, wie genau die besagte Map implementiert sein muss. Du kannst der Methode oder Klasse je nach Anwendungsfall eine HashMap oder TreeMap übergeben. Auch wenn die Implementierung von Hash- und TreeMap anders ist kann die entsprechende Methode trotzdem damit arbeiten, weil sie nur weiß, dass es sich beim übergebenen Parameter um eine Map handelt. Die eigentliche Implementierung wird hier also verschleiert und man könnte jede Klasse benutzen, die Map implementiert. Hoffe das hilft dir weiter. 😄

    • @Michael-wh4my
      @Michael-wh4my 2 года назад

      @@JonasKeil Super danke dir, sehr gut erklärt! :)

  • @mariyakostova5322
    @mariyakostova5322 2 года назад +1

    Ich kapiere es nicht ganz :( Sorry, wenn die Frage dumm klingt, aber was ist der Unterschied zu einer ArrayListe?

    • @JonasKeil
      @JonasKeil  2 года назад +3

      Hey Mariya gut dass du nachfragst! Tut mir mega Leid wenn das im Video nicht so ganz rüber gekommen ist, darum versuche ich es hier nochmal:
      Also eine ArrayList speichert sich beliebig viele Werte von einem Datentypen. Und eine HashMap speichert sich eben keine einzelnen Werte, sondern immer Paare von zwei Werten.
      Das heißt wenn du dir eine HashMap wie folgt erstellst: „Map myMap = new HashMap();“ dann sagen wir, dass bei jedem Paar der erste Wert ein Integer und der zweite ein Double ist. Wir könnten also um ein Beispiel zu nennen einen neuen Eintrag mit „myMap.put(372537, „Baum“)“ machen.
      Man hat sich dann darauf geeinigt den ersten Wert eines Paares „Key“ und den zweiten Wert „Value“ zu nennen. Um einen Value (Wert) zu finden brauchen wir immer den dazugehörigen Key (Schlüssel). Um also unseren Baum abzurufen brauchen wir den Schlüssel 372537, so wie wir ihn uns vorher gespeichert haben. Die Methode dafür rufen wir mit myMap.get(372537) auf.
      Lass mich wissen, ob diese Erklärung für dich verständlicher war😁🙌🏻
      LG Jonas

    • @mariyakostova5322
      @mariyakostova5322 2 года назад +1

      @@JonasKeil Vielen, lieben Dank für die ausführliche Erklärung!
      Es liegt nicht an dir, deine Videos sind total verständlich und hilfreich! Nur ich stehe ganz am Anfang und verstehe vieles nicht.
      Ich hab mir halt gedacht wenn man in einer Arrayliste beliebig viele Daten speichern kann, dann kann man das ja auch mit nur zwei Daten machen. Und wozu man den Schlüssel braucht verstehe ich auch nicht 😁 Ich mein, er macht ja alles noch komplizierter.. 🙈
      Aber fühl dich bitte nicht verpflichtet mir alles zu erklären. Ich hoffe, dass icj bald einen Kurs anfange, wo ich alle meine Fragen stellen kann 😃
      Vielen Dank noch mal für deine Videos und für deine Hilfe! Ich kann mir nur vorstellen wie viel Arbeit dahinter steht! 🙏

    • @JonasKeil
      @JonasKeil  2 года назад +2

      @@mariyakostova5322 Ja verstehe, das Thema ist am Anfang echt kompliziert :)
      Trotzdem vielen Dank für dein Feedback, ich werde auch weiterhin mein Bestes geben😁👍🏻
      Zu deiner Frage: Natürlich könntest du auch zwei ArrayListen nehmen, an dem Gedanken ist an sich alles richtig. Nur haben zwei Listen das Problem, das hier die Zuordnung gar nicht gegeben ist. Stell dir mal vor aus einer Liste wird ein Element gelöscht, dann wäre eine genaue Zuordnung wie in einer Map gar nicht mehr möglich. Für Dinge, die die genaue Zuordnung also brauchen (Wörterbücher, etc. ) würde ich dir immer zu einer HashMap raten :)

  • @OettingerPirat
    @OettingerPirat 2 года назад +1

    Hier mein modifiziertes Quiz-Programm: die Daten zum Befüllen der Map werden dabei von einer lokalen .txt-Datei eingelesen, bei denen Land und Hauptstadt durch einen Tab voneinander getrennt sind. Außerdem merkt sich das Programm, welche Städte bereits korrekt genannt wurden, so dass die zugehörigen Länder nicht erneut abgefragt werden.
    package youTube.keilJonas;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Scanner;
    public class CapitalQuiz {
    public static void main(String[] args) {
    Map capitalCities = new HashMap();
    File landHauptstadtTabelle = new File("LaenderQuiz.txt");
    if (landHauptstadtTabelle.exists()) {
    System.out.println("Herzlich willkommen zum tollen Land-Hauptstadt-Quiz!
    Mit der Eingabe von 'quit' beendet du das Quiz...
    ");
    Scanner sc = null;
    try {
    sc = new Scanner(landHauptstadtTabelle, "UTF-8");
    sc.useDelimiter("\t");
    while(sc.hasNext()) {
    String[] landStadtPaar = sc.nextLine().toString().split("\t");
    if(landStadtPaar.length > 0) {
    capitalCities.put(landStadtPaar[0], landStadtPaar[1]);
    }
    }
    sc.close();
    } catch(FileNotFoundException e) {
    System.out.println("Oh, wir haben leider zurzeit Schwiergkeiten auf unsere Datenserver zuzugreifen...
    Versuch es spaeter noch einmal.");
    }

    } else {
    System.out.println("Krrrchhh.... 404 @_@!");
    }
    if (capitalCities.size() > 0) {
    List countries = new ArrayList();
    countries.addAll(capitalCities.keySet());
    String country = "";
    List bereitsGemacht = new ArrayList();
    Random rnd = new Random();
    Scanner sc = new Scanner(System.in);
    String antwort = "";
    int score = 0;
    // gameloop
    gameloop: while(true) {
    if (bereitsGemacht.size() == countries.size()) {
    System.out.println("Glueckwunsch! Keine Laender mehr uebrig :)!
    ");
    break gameloop;
    }
    benutzerEingabe: while(true) {
    int ind = rnd.nextInt(countries.size());
    country = countries.get(ind);

    if (bereitsGemacht.size() > 0) {
    for (String land : bereitsGemacht) {
    if (land.equals(country)) {
    continue benutzerEingabe;
    }
    }
    }
    System.out.print("Was ist die Hauptstadt von " + country + "?: ");
    break benutzerEingabe;
    }
    antwort = sc.nextLine().toLowerCase();
    if (antwort.toLowerCase().equals("quit")) {
    System.out.println("Danke fuer's Spielen! Bye~
    ");
    break;
    } else if (antwort.equals(capitalCities.get(country).toLowerCase())) {
    System.out.println("Koooooorrrrrrrrrekt!
    ");
    score++;
    bereitsGemacht.add(country);
    } else {
    System.out.println("Faaaaaaalsch!! Richtig waere gewesen: " + capitalCities.get(country) + "
    ");
    }
    }
    System.out.println("Du hast " + score + " Punkte erreicht :)");
    sc.close();
    } else {
    System.out.println("Keine Daten, kein Spiel... bye!");
    }
    }
    }

    • @JonasKeil
      @JonasKeil  2 года назад

      Sehr stark, mal wieder ne richtig gute Lösung!🎉💪🏻

  • @gunny145
    @gunny145 2 года назад +1

    ne frage hat wer eine idee? Habs verscht es zu benutzen und ein AlphabetzuBinary übersetzer zu bauen... so sieht mein Code aus:
    HashMap alphabet = new HashMap();

    alphabet.put('A', 01000001); alphabet.put('B', 01000010);
    wenn ich dies allerdings ausgebebe mit deer get 'A' Methode kommt leider nicht etwa 01000001 sondern {A=262145, B=262152 bei System.out heraus. Wo kommen die zahlen bitte her? Kann mir wer helfen? Wäre echt dankbar. :)
    btw super Video.

    • @JonasKeil
      @JonasKeil  2 года назад +1

      Hey, erstmal vielen Dank für das Feedback! Ich war auch erst ein wenig verwundert. Aber scheinbar speichert die HashMap deine Zahl im Oktalsystem ab (Basis 8). Das heißt die erste Zahl 262145 = 8^6+8^0 und die zweite Zahl 262152 = 8^6 + 8^1.
      Einfach die Zahl als String abspeichern, dann sollte nichts passieren :))

    • @gunny145
      @gunny145 2 года назад +1

      @@JonasKeil Vielen dank jetzt klapps wirklich! Hat mir super geholfen :D😀😀👍
      ps: Das mit dem Oktalsystem find ich im moment echt noch kompliziert. :O. Komisch das Java bzw Integer das einfach als Oktalsystem abspeichert gibts dafür eine Erklärung ?
      🤷‍♂🤷‍♂

    • @JonasKeil
      @JonasKeil  2 года назад

      @@gunny145 Freut mich, dass es geklappt hat! Warum das mit dem Oktalsystem so ist kann ich dir ehrlich gesagt auch nicht beantworten :) LG Jonas

    • @OettingerPirat
      @OettingerPirat 2 года назад +2

      Möglich, dass der Fehler mitunter auch daran lag, dass du versucht hast, Zahlen mit führender 0 als Integer zu speichern. Daher - so wie Jonas gesagt hat - ist ein String hier wohl sowieso angebrachter :) Edit: Laut geekforgeeks: " In java, we can store octal numbers by just adding 0 while initializing. They are called Octal Literals. The data type used for storing is int. "

    • @mich437
      @mich437 2 года назад +1

      Es liegt daran wie du die Zahlen eingibst wenn du 0x vor Zahlen eingibt wird die Eingabe als Binärzahl interpretiert.
      Wenn die Zahl mit 0 anfängt wird sie als Octalzahl interpretiert.
      Ob es irgendwie möglich gibt trotzdem ohne String eine 0 für Dezimalzahlen mit davor zu haben weiß ich nicht dafür kenne ich mich auch zu wenig mit Java aus bin auch gearde erst am lernen :D