JavaRush /Blog Jawa /Random-JV /HashMap ing Jawa - peta apa iku?

HashMap ing Jawa - peta apa iku?

Diterbitake ing grup
Hello! Dina iki kita bakal ngomong babagan struktur data liyane - Peta. Jeneng resmi Rusia yaiku "array asosiatif," nanging ora asring digunakake. Pilihan sing luwih umum yaiku "kamus", "peta", utawa (paling asring) anglicism slang "peta" :) Nang Peta, data disimpen ing format "tombol" - "nilai", yaiku pasangan. Tombol lan nilai kasebut bisa dadi obyek apa wae - nomer, string, utawa obyek saka kelas liyane.

Kepiye Map beda karo struktur data liyane

Sadurunge, kita ndeleng struktur data ing ngendi unsur disimpen dhewe. Ing array, utawa ArrayList / LinkedList , kita nyimpen sawetara unsur tartamtu. Nanging kepiye yen tugas kita rada owah? Contone, bayangake yen kita ngadhepi tugas nggawe dhaptar 100 wong, ing ngendi jeneng lengkap lan nomer paspor bakal disimpen. Ing asas, iku ora angel. Contone, sampeyan bisa pas loro ing baris lan nggawe dhaptar baris kaya iki: "Anna Ivanovna Reshetnikova, 4211 717171." Nanging solusi iki duwe rong kekurangan. Pisanan, kita bisa uga mbutuhake fungsi telusuran paspor. Lan kanthi format iki kanggo nyimpen informasi, iki bakal dadi masalah. Lan kapindho, ora ana sing bakal nyegah kita nggawe rong wong sing beda karo nomer paspor sing padha. Lan iki minangka cacat paling serius saka solusi kita. Kahanan kasebut kudu diilangi, ora ana wong loro kanthi nomer paspor sing padha. Ing kene Peta lan fitur-fitur kasebut mbantu kita (nyimpen data kanthi pasangan ing format "kunci" - "nilai"). Ayo goleki implementasi Peta sing paling umum - kelas Java HashMap .HashMap - peta apa iki?  - 1

Nggawe HashMap ing Jawa lan nggarap kelas

Implementasi iki gampang banget kanggo nggawe:
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();

}
Ing kene kita wis nggawe kamus ing ngendi unsur bakal disimpen ing format "nomer-string". Nomer bakal dadi kunci, lan senar bakal dadi nilai. Kita uga nuduhake jinis tombol apa sing bakal kita duwe ( Integer) lan jinis nilai ( String). Kok ngono? Kaping pisanan, kunci ing HashMap mesthi unik . Iki bakal apik kanggo kita amarga kita bisa nggunakake nomer paspor minangka kunci lan ngindhari duplikat. Lan baris kanthi jeneng lengkap bakal tumindak minangka nilai (jeneng lengkap wong sing beda-beda bisa gampang diulang, ora ana sing salah karo kita).

Nambahake pasangan anyar menyang HashMap

Tugas iki katon kaya iki:
public class Main {

   public static void main(String[] args) {
       HashMap<Integer, String> passportsAndNames = new HashMap<>();


       passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
       passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
       passportsAndNames.put(8082771, "Donald John Trump");
       System.out.println(passportsAndNames);

   }

}
Cara iki digunakake kanggo iki put(). Kajaba iku, HashMap duwe cara sing ditimpa toString()supaya bisa dicithak menyang konsol. Output bakal katon kaya iki: {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 162348=Ivan Mikhailovich Serebryakov}

Fitur saka HashMap Keys

Saiki ayo priksa manawa kunci kasebut pancen unik? Ayo nyoba nambah unsur anyar kanthi kunci sing wis ana ing peta:
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();

   passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
   passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
   passportsAndNames.put(8082771, "Donald John Trump");
   passportsAndNames.put(162348, "Viktor Mikhailovich Stychkin");//repeat key

   System.out.println(passportsAndNames);

}
Output: {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 162348=Viktor Mikhailovich Stychkin} Elemen sadurunge karo kunci 162348, kaya sing sampeyan deleng, ditimpa. "Kunci" diarani kunci kanthi alasan. Nilai ing HashMap diakses kanthi kunci (nanging ora kosok balene - kunci ora bisa dipikolehi kanthi nilai, amarga nilai bisa diduplikasi). Iki katon kanthi jelas ing conto njupuk unsur, uga mbusak unsur saka HashMap:
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();

   passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
   passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
   passportsAndNames.put(8082771, "Donald John Trump");

   String lidiaName = passportsAndNames.get(212133);
   System.out.println(lidiaName);


   passportsAndNames.remove(162348);
   System.out.println(passportsAndNames);

}
Kanggo entuk nilai utawa mbusak pasangan saka kamus, kita kudu ngirim persis tombol unik sing cocog karo nilai iki menyang get()metode . Ora ana indeks numerik, kaya ing array utawa dhaptar, ing HashMap - nilai kasebut diakses kanthi kunci. Output konsol: Lidiya Arkadyevna Bublikova {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump}remove()

Priksa manawa ana kunci lan nilai

Ing ArrayList lan LinkedList kelas , kita bisa mriksa apa dhaftar ngemot unsur tartamtu. HashMap uga ngijini sampeyan kanggo nindakake iki, lan kanggo loro bagéan saka pasangan: wis cara containsKey()(mriksa anané tombol) lan containsValue()(mriksa anané nilai).
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();

   passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
   passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
   passportsAndNames.put(8082771, "Donald John Trump");


   System.out.println(passportsAndNames.containsKey(11111));
   System.out.println(passportsAndNames.containsValue("Donald John Trump"));

}
Output: palsu bener

Entuk dhaptar kabeh kunci lan nilai

Fitur HashMap liyane sing trep yaiku sampeyan bisa entuk dhaptar kabeh tombol lan kabeh nilai kanthi kapisah . Kanggo iki, cara keySet()lan digunakake values():
public class Main {

   public static void main(String[] args) {

       HashMap<Integer, String> passportsAndNames = new HashMap<>();

       passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
       passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
       passportsAndNames.put(8082771, "Donald John Trump");

       Set<Integer> keys = passportsAndNames.keySet();
       System.out.println("Keys: " + keys);

       ArrayList<String> values = new ArrayList<>(passportsAndNames.values());
       System.out.println("Values: " + values);

   }

}
Tombol dijupuk menyang koleksi Set. Keanehane yaiku ora bisa ngemot unsur sing diulang. Saiki sing kudu dieling-eling yaiku dhaptar kabeh kunci bisa dicopot saka HashMap dadi koleksi sing kapisah. Ing conto, kita nyimpen nilai normal ArrayList. Output konsol: Tombol: [212133, 8082771, 162348] Nilai: [Lidiya Arkadyevna Bublikova, Donald John Trump, Ivan Mikhailovich Serebryakov] Metode size()nindakake clear()perkara sing padha kaya ing struktur sadurunge sing ditindakake: sing pisanan ngasilake unsur nomer. ing kamus ing wayahe saiki, sing kapindho mbusak kabeh unsur.
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();

   passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
   passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
   passportsAndNames.put(8082771, "Donald John Trump");

   System.out.println(passportsAndNames.size());
   passportsAndNames.clear();
   System.out.println(passportsAndNames);

}
Output: 3 {} Kanggo mriksa apa HashMap kita nduweni paling ora siji unsur, kita bisa nggunakake cara isEmpty():
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();

   passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
   passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
   passportsAndNames.put(8082771, "Donald John Trump");

   if (!passportsAndNames.isEmpty()) {

       System.out.println(passportsAndNames);

   }

}
Output: {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 162348=Ivan Mikhailovich Serebryakov} Saiki kita bakal metu menyang konsol mung sawise verifikasi awal :)

Nggabungake rong peta dadi siji

Titik liyane sing menarik yaiku rong peta bisa digabung dadi siji . Ana cara kanggo iki putAll(). Kita nyebataken ing HashMap pisanan , pass nomer loro minangka argumen, lan unsur saka kaloro bakal ditambahake menyang pisanan:
public static void main(String[] args) {

   HashMap<Integer, String> passportsAndNames = new HashMap<>();
   HashMap<Integer, String> passportsAndNames2 = new HashMap<>();

   passportsAndNames.put(212133, "Lydia Arkadievna Bublikova");
   passportsAndNames.put(162348, "Ivan Mikhailovich Serebryakov");
   passportsAndNames.put(8082771, "Donald John Trump");

   passportsAndNames2.put(917352, "Alexey Andreevich Ermakov");
   passportsAndNames2.put(925648, "Maxim Olegovich Arkharov");


   passportsAndNames.putAll(passportsAndNames2);
   System.out.println(passportsAndNames);

}
Output: {917352=Alexey Andreevich Ermakov, 212133 = Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 925648=Maxim Olegovich Arkharov, 162348=Ivan Mikhailovich Serebrya Andikov} Kabeh unsur saka paspor . Saiki ayo goleki conto sing luwih rumit. Yaiku, iterate liwat HashMap ing daur ulang.
for (Map.Entry entry: passportsAndNames.entrySet()) {

   System.out.println(entry);

}
Antarmuka Map.Entrymung tegese pasangan nilai kunci ing kamus. Cara kasebut entrySet()ngasilake dhaptar kabeh pasangan ing HashMap kita (amarga peta kita mung kalebu pasangan Entri kasebut, kita ulangi pasangan, lan ora tombol utawa nilai kanthi kapisah). Kesimpulan: 212133=Lidiya Arkadyevna Bublikova 8082771=Donald John Trump 162348=Ivan Mikhailovich Serebryakov Simpen artikel iki kanggo mangsa ngarep: https://habr.com/ru/post/128017/ Saiki isih awal banget kanggo maca, nanging ing mangsa ngarep , nalika sampeyan bakal nggunakake HashMap, bakal mbantu sampeyan ngerti carane struktur data iki dianggo saka njero. Uga, aja lali mriksa dokumentasi Oracle resmi ing HashMap.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION