CodeGym /Blog Jawa /Acak /HashMap: peta apa iki?
John Squirrels
tingkat
San Francisco

HashMap: peta apa iki?

Diterbitake ing grup
Hi! Ing wulangan iki, kita bakal njupuk review luwih cedhak ing Java HashMap . Sadurunge, kita wis sinau struktur data ing ngendi unsur kasebut disimpen minangka awake dhewe. Ing array utawa ArrayList / LinkedList , kita nyimpen sawetara unsur. Nanging kepiye yen tugas kita rada owah?
HashMap: peta apa iki?  - 1
Bayangake tugas ing ngisor iki: nggawe dhaptar 100 wong sing nyimpen jeneng lan nomer paspor saben wong. Ing asas, iki ora dadi angel. Contone, sampeyan bisa ngisi loro-lorone menyang senar, banjur nggawe dhaptar senar iki: "Amelia Aguilar, 4211 717171". Nanging solusi iki duwe rong kekurangan. Kaping pisanan, kita butuh kemampuan kanggo nggoleki kanthi nomer paspor. Lan iki bakal dadi masalah amarga format panyimpenan informasi iki. Kapindho, ora ana sing ngalangi kita nggawe rong wong kanthi nomer paspor sing padha. Lan iki minangka kekurangan solusi sing paling serius. Iki ora kudu diidini: ora ana wong loro sing duwe nomer paspor sing padha. Struktur data anyar mbantu kita: Peta. Iki uga dikenal minangka "array asosiatif", nanging istilah iki arang digunakake. Sing luwih umum, diarani "kamus" utawa "peta". :) Carane dhasar beda saka struktur data kita wis dianggep sadurunge? Sing paling penting, nyatane yen data ing Peta disimpen minangka pasangan kunci-nilai. Apa wae bisa dadi kunci lan nilai: angka, string, utawa obyek saka kelas liyane. Dina iki kita bakal sinau implementasi kelas Peta sing paling umum : Java HashMap . HashMap: peta apa iki?  - 2

Dadi, apa sing kudu kita ngerteni babagan HashMap ing Jawa?

Iku gampang banget kanggo nggawe:

public static void main(String[] args) {
   HashMap<Integer, String> passportsAndNames = new HashMap<>();
}
Ing kene kita nggawe kamus sing nyimpen unsur minangka pasangan "nomer-string". Nomer kasebut bakal dadi kunci, lan senar minangka nilai. Uga kita nemtokake jinis kunci (Integer) lan jinis nilai (String). Kenging punapa? Pisanan, kunci HashMap tansah unik. Iki cocog karo kita, amarga kita bisa nggunakake nomer paspor minangka kunci lan ngindhari duplikat. Nilai kasebut bakal dadi senar kanthi jeneng lengkap (wong sing beda-beda bisa duwe jeneng sing padha; ora perlu kuwatir). Nambahake pasangan anyar menyang HashMap katon kaya iki:

public class Main {

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

       passportsAndNames.put (212133, "Bridget Logan");
       passportsAndNames.put (162348, "Ivan the Great");
       passportsAndNames.put(8082771, "Donald John Trump");
       System.out.println(passportsAndNames);
   }
}
Kita nggunakake metode put () kanggo iki. Kajaba iku, HashMap overrides toString () cara, supaya bisa ditampilake ing console. Outpute bakal katon kaya mangkene: {212133=Bridget Logan, 8082771=Donald John Trump, 162348=Ivan Agung} Saiki ayo priksa manawa tombol kasebut pancen unik? Ayo coba nambahake unsur anyar kanthi kunci sing wis digunakake ing peta:

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

   passportsAndNames.put (212133, "Bridget Logan");
   passportsAndNames.put (162348, "Ivan the Great");
   passportsAndNames.put(8082771, "Donald John Trump");
   passportsAndNames.put(162348, "Albert Kent");// This key has already been used
   System.out.println(passportsAndNames);
}
Output: {212133=Bridget Logan, 8082771=Donald John Trump, 162348=Albert Kent} Kaya sing sampeyan ngerteni, nilai sadurunge sing digandhengake karo tombol 162348 ditindhes. Kita nggunakake istilah "kunci" kanthi alesan. Nilai ing HashMap diakses nggunakake tombol, nanging ora sebaliknya. Tombol ora bisa dipikolehi kanthi nggunakake nilai, amarga nilai kasebut bisa uga ora unik. Iki bisa katon kanthi jelas nalika njupuk utawa mbusak unsur saka HashMap :

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

   passportsAndNames.put (212133, "Bridget Logan");
   passportsAndNames.put (162348, "Ivan the Great");
   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 pass kanggo njaluk () lan mbusak () tombol unik sing cocog karo nilai. Ora kaya array lan dhaptar, HashMap ing Jawa ora duwe indeks numerik: nilai diakses nggunakake tombol. Output konsol: Bridget Logan {212133=Bridget Logan, 8082771=Donald John Trump} Kelas ArrayList lan LinkedList ayo priksa manawa dhaptar kasebut ngemot unsur tartamtu. Java HashMap ngidini kita nindakake iki. Apa maneh, kita bisa nindakake iki kanggo loro anggota saka pasangan: Iki apa containsKey () (mriksa tombol) lan containsValue ()(mriksa nilai) cara kanggo.

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

   passportsAndNames.put (212133, "Bridget Logan");
   passportsAndNames.put (162348, "Ivan the Great");
   passportsAndNames.put(8082771, "Donald John Trump");

   System.out.println(passportsAndNames.containsKey(11111));
   System.out.println(passportsAndNames.containsValue("Donald John Trump"));
}
Output: false true Fitur liyane HashMap sing trep ing Jawa yaiku kasunyatan manawa sampeyan bisa entuk dhaptar kapisah kabeh tombol lan kabeh nilai. Iki ditindakake kanthi metode keySet () lan nilai () :

public class Main {

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

       passportsAndNames.put (212133, "Bridget Logan");
       passportsAndNames.put (162348, "Ivan the Great");
       passportsAndNames.put(8082771, "Donald John Trump");

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

       ArrayList<String> values = new ArrayList<>(passportsAndNames.values());
       System.out.println("Values: " + values);
   }
}
Tombol kasebut diekstrak dadi Set , sing durung kita tutupi. Iku khusus sing ora bisa ngemot unsur mbaleni. Saiki sing utama yaiku elinga manawa dhaptar kabeh kunci bisa dijupuk saka HashMap dadi koleksi sing kapisah. Ing contone, kita nyimpen nilai kasebut menyang ArrayList biasa . Output konsol: Tombol: [212133, 8082771, 162348] Nilai: [Bridget Logan, Donald John Trump, Ivan the Great] Cara ukuran () lan cetha () nindakake perkara sing padha kaya ing struktur sadurunge sing wis dibahas: pisanan ngasilake nomer unsur saiki ing kamus, kaloro mbusak kabeh unsur.

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

   passportsAndNames.put (212133, "Bridget Logan");
   passportsAndNames.put (162348, "Ivan the Great");
   passportsAndNames.put(8082771, "Donald John Trump");

   System.out.println(passportsAndNames.size());
   passportsAndNames.clear();
   System.out.println(passportsAndNames);
}
Output: 3 {} Kanggo mriksa manawa ana paling ora ana siji unsur ing HashMap kita , kita bisa nggunakake metode isEmpty() :

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

   passportsAndNames.put (212133, "Bridget Logan");
   passportsAndNames.put (162348, "Ivan the Great");
   passportsAndNames.put(8082771, "Donald John Trump");

   if (!passportsAndNames.isEmpty()) {

       System.out.println(passportsAndNames);
   }
}
Output: {212133=Bridget Logan, 8082771=Donald John Trump, 162348=Ivan the Great} Saiki kita mung bakal output menyang console sawise mriksa awal. :) Titik liyane sing menarik yaiku loro Peta bisa digabung dadi siji. Iki rampung nggunakake metode putAll () . Kita nyebataken ing HashMap pisanan , pass nomer loro minangka argumen, lan unsur saka kaloro ditambahake menyang pisanan:

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

   passportsAndNames.put (212133, "Bridget Logan");
   passportsAndNames.put (162348, "Ivan the Great");
   passportsAndNames.put(8082771, "Donald John Trump");

   passportsAndNames2.put(917352, "Clifford Patrick");
   passportsAndNames2.put(925648, "Mitchell Salgado");

   passportsAndNames.putAll(passportsAndNames2);
   System.out.println(passportsAndNames);
}
Output: {917352=Clifford Patrick, 212133=Bridget Logan, 8082771=Donald John Trump, 925648=Mitchell Salgado, 162348=Ivan Agung} Kabeh pasangan ing passportsAndNames2 wis disalin menyang passportsAndNames . Saiki nimbang conto sing luwih rumit. Khusus, ngulang liwat HashMap ing daur ulang.

for (Map.Entry<Integer, String> entry: passportsAndNames.entrySet()) {
   System.out.println(entry);
}
Kelas Map.Entry nuduhake pasangan kunci-nilai ing kamus. Metode entrySet () ngasilake dhaptar kabeh pasangan ing HashMap kita . Amarga peta kita kasusun saka pasangan Map.Entry iki , kita lagi iterasi liwat pasangan, ora tombol utawa nilai kapisah. Output: 212133=Bridget Logan 8082771=Donald John Trump 162348=Ivan Agung Uga, aja lali sinau dokumentasi Oracle resmi kanggo HashMap .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION