JavaRush /جاوا بلاگ /Random-SD /HashMap جاوا ۾ - اهو ڪهڙي قسم جو نقشو آهي؟

HashMap جاوا ۾ - اهو ڪهڙي قسم جو نقشو آهي؟

گروپ ۾ شايع ٿيل
سلام! اڄ اسان هڪ ٻئي ڊيٽا جي جوڙجڪ بابت ڳالهائينداسين - نقشو. ان جو سرڪاري نالو روسي نالو آهي "ايسوسيئيٽو صف"، پر اهو اڪثر استعمال نه ڪيو ويندو آهي. وڌيڪ عام آپشن آهن ”لغت“، ”نقشو“، يا (اڪثر ڪري) ڳالهايل انگلڪيزم ”نقشي“ :) نقشي جي اندر، ڊيٽا محفوظ ٿيل آهي ”ڪي“ - ”قدر“ فارميٽ ۾، يعني جوڙن ۾. ٻئي ڪنجيون ۽ قيمتون ڪنهن به شيون ٿي سگهن ٿيون- انگ، تار، يا ٻين طبقن جون شيون.

ڪيئن نقشو ٻين ڊيٽا جي جوڙجڪ کان مختلف آهي

اڳي، اسان ڊيٽا جي جوڙجڪ تي ڏٺو جتي عناصر پاڻ ۾ محفوظ ٿيل آهن. هڪ صف ۾، يا ArrayList / LinkedList ، اسان عناصر جو هڪ خاص تعداد ذخيرو ڪندا آهيون. پر ڇا جيڪڏھن اسان جو ڪم ٿورڙو تبديل ٿي وڃي؟ مثال طور، تصور ڪريو ته اسان کي 100 ماڻهن جي لسٽ ٺاهڻ جي ڪم سان منهن ڏيڻو پوي ٿو، جتي ان شخص جو پورو نالو ۽ پاسپورٽ نمبر محفوظ ڪيو ويندو. اصول ۾، اهو ايترو ڏکيو نه آهي. مثال طور، توهان ٻنهي کي هڪ لڪير ۾ فٽ ڪري سگهو ٿا ۽ هن طرح جي لائينن جي هڪ فهرست ٺاهي سگهو ٿا: “Ana Ivanovna Reshetnikova, 4211 717171.” پر هن حل ۾ ٻه نقصان آهن. پهرين، اسان کي پاسپورٽ ڳولا فنڪشن جي ضرورت پوندي. ۽ معلومات کي محفوظ ڪرڻ لاءِ هن فارميٽ سان، اهو مسئلو ٿيندو. ۽ ٻيو، ڪجھ به نه روڪيندو اسان کي ٻه مختلف ماڻهو ٺاهڻ کان ساڳي پاسپورٽ نمبرن سان. ۽ هي اسان جي حل جو سڀ کان سنگين نقصان آهي. اهڙين حالتن کي مڪمل طور تي خارج ڪيو وڃي؛ اتي ڪو به ٻه ماڻهو نه آهن جن وٽ هڪ ئي پاسپورٽ نمبر آهي. هتي نقشو ۽ ان جون بيان ڪيل خاصيتون اسان جي مدد لاءِ اچن ٿيون (ڊيٽا کي "ڪي" - "قيمت" فارميٽ ۾ هڪ جوڙي ۾ محفوظ ڪرڻ). اچو ته ڏسو سڀ کان عام نقشي تي عمل درآمد - جاوا هش ميپ ڪلاس .HashMap - هي ڪهڙي قسم جو نقشو آهي؟  - 1

جاوا ۾ HashMap ٺاهڻ ۽ ڪلاس سان ڪم ڪرڻ

اهو عمل ٺاهڻ لاء تمام آسان آهي:
public static void main(String[] args) {

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

}
هتي اسان هڪ ڊڪشنري ٺاهي آهي جنهن ۾ عناصر ”نمبر-سٽرنگ“ فارميٽ ۾ محفوظ ڪيا ويندا. انگ اھم ھوندو، ۽ اسٽرنگ قدر ھوندو. اسان اهو پڻ اشارو ڪيو ته اسان وٽ ڪهڙي قسم جي چابيون هونديون ( Integer) ۽ ڪهڙي قسم جا قدر ( String). ائين ڇو آهي؟ پهريون، هڪ HashMap ۾ ڪنجي هميشه منفرد آهي . اهو اسان لاءِ وڏو ڪم ڪندو ڇو ته اسان پاسپورٽ نمبر کي ڪيئي طور استعمال ڪري سگهون ٿا ۽ نقلن کان پاسو ڪري سگهون ٿا. ۽ مڪمل نالي سان قطار هڪ قدر جي طور تي ڪم ڪندي (مختلف ماڻهن جو پورو نالو آساني سان ورجائي سگهجي ٿو، اسان لاء ان سان گڏ ڪجھ به غلط ناهي).

HashMap ۾ نئون جوڙو شامل ڪرڻ

هي ڪم هن طرح نظر اچي ٿو:
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);

   }

}
اهو طريقو هن لاء استعمال ڪيو ويندو آهي put(). اضافي طور تي، HashMap وٽ ھڪڙو ختم ٿيل طريقو آھي toString()تنھنڪري اھو پرنٽ ڪري سگھجي ٿو ڪنسول ڏانھن. پيداوار هن طرح نظر ايندي: {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 162348=Ivan Mikhailovich Serebryakov}

HashMap Keys جون خاصيتون

هاڻي اچو ته چيڪ ڪريون ته ڇا اهي چاٻيون واقعي منفرد آهن؟ اچو ته هڪ نئون عنصر شامل ڪرڻ جي ڪوشش ڪريون هڪ ڪنجي سان اڳ ۾ ئي نقشي ۾:
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);

}
آئوٽ پُٽ: {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 162348=Viktor Mikhailovich Stychkin} 162348 key سان اڳوڻو عنصر، جيئن توهان ڏسي سگهو ٿا، اوور رائٽ ڪيو ويو. ”ڪٻي“ کي هڪ سبب لاءِ چاٻي سڏيو ويو. HashMap ۾ قيمتون ڪي جي ذريعي پهچن ٿيون (پر ان جي برعڪس نه - ڪيئي قدر سان حاصل نه ٿي ڪري سگھجي، ڇاڪاڻ ته قدرن کي نقل ڪري سگھجي ٿو). اهو واضح طور تي هڪ عنصر حاصل ڪرڻ جي مثالن ۾ ڏٺو ويو آهي، انهي سان گڏ هڪ عنصر کي هٽائڻ 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);

}
هڪ قدر حاصل ڪرڻ يا ڊڪشنري مان هڪ جوڙي کي حذف ڪرڻ لاءِ، اسان کي لازمي طور تي ان قدر سان ملندڙ منفرد ڪيئي کي پاس ڪرڻ گهرجي get()طريقن سان. هتي ڪي به عددي انڊيڪس نه آهن، جيئن ته صفن يا فهرستن ۾، HashMap ۾ - قدر کي ڪيچ ذريعي پهچايو ويندو آهي. ڪنسول آئوٽ پُٽ: لديا آرڪيديوانا بوبليڪووا {212133=ليڊيا آرڪيديوانا بوبليڪووا، 8082771=ڊونالڊ جان ٽرمپ}remove()

چيڪ ۽ قدر جي موجودگي لاء چيڪ

ArrayList ۽ LinkedList طبقن ۾ ، اسان چيڪ ڪري سگهون ٿا ته ڇا هڪ فهرست هڪ خاص عنصر تي مشتمل آهي. HashMap پڻ توهان کي اهو ڪرڻ جي اجازت ڏئي ٿو، ۽ جوڙي جي ٻنهي حصن لاء: ان ۾ طريقا آهن containsKey()(هڪ چيڪ جي موجودگي لاء چيڪ ڪريو) ۽ containsValue()(هڪ قدر جي موجودگي لاء چيڪ ڪريو).
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"));

}
ٻاڦ: ڪوڙ سچ

سڀني ڪنجين ۽ قدرن جي لسٽ حاصل ڪرڻ

HashMap جي هڪ ٻي آسان خصوصيت اها آهي ته توهان الڳ الڳ سڀني ڪنجين ۽ سڀني قدرن جي فهرست حاصل ڪري سگهو ٿا . هن لاء، طريقا keySet()۽ استعمال ڪيا ويا آهن 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);

   }

}
چاٻيون گڏ ڪرڻ ۾ ڪڍيا ويا آهن Set. ان جي خصوصيت اها آهي ته ان ۾ ٻيهر ورجائيندڙ عناصر شامل نه هوندا. هاڻي ياد رکڻ لاء اهم شيء آهي ته سڀني چابن جي فهرست HashMap مان ڪڍي هڪ الڳ مجموعو ۾ ڪري سگهجي ٿو. مثال ۾، اسان قدرن کي عام ۾ محفوظ ڪيو ArrayList. ڪنسول آئوٽ پُٽ: ڪيز: [212133, 8082771, 162348] قدر: [ليڊيا آرڪاديوينا بوبليڪووا، ڊونالڊ جان ٽرمپ، ايوان ميخائيلووچ سيريبرياڪوف] طريقا بلڪل ائين ئي size()ڪن ٿا clear()جيئن پوئين ڍانچي ۾ جن مان گذريا آهيون: پهريون نمبر عنصرن کي واپس ڏئي ٿو. لغت موجوده وقت تي، ٻيو سڀ عناصر کي ختم ڪري ٿو.
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 {} چيڪ ڪرڻ لاءِ ته ڇا اسان جي HashMap ۾ گهٽ ۾ گهٽ هڪ عنصر آهي، اسان اهو طريقو استعمال ڪري سگهون ٿا 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);

   }

}
آئوٽ پٽ: {212133=Lidiya Arkadyevna Bublikova, 8082771=Donald John Trump, 162348=Ivan Mikhailovich Serebryakov} ھاڻي اسان ابتدائي تصديق کان پوءِ ئي ڪنسول ڏانھن آئوٽ ڪنداسين :)

ٻن نقشن کي هڪ ۾ گڏ ڪرڻ

ٻيو دلچسپ نقطو اهو آهي ته ٻن نقشن کي هڪ ۾ گڏ ڪري سگهجي ٿو . ھن لاء ھڪڙو طريقو آھي putAll(). اسان ان کي پهرين HashMap تي سڏين ٿا ، ٻئي کي دليل طور پاس ڪريو، ۽ ٻئي کان عناصر پهرين ۾ شامل ڪيا ويندا:
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);

}
پيداوار : { 917352 = Alexey Andreavichov، 2123483333338 = Induadewhavicewnavews} ڪيو ويو . هاڻي اچو ته هڪ وڌيڪ پيچيده مثال ڏسو. يعني، هڪ لوپ ۾ HashMap مٿان iterate.
for (Map.Entry entry: passportsAndNames.entrySet()) {

   System.out.println(entry);

}
هڪ انٽرفيس جو Map.Entryمطلب صرف هڪ ڊڪشنري اندر هڪ اهم-قدر جوڙو. طريقو entrySet()اسان جي HashMap ۾ سڀني جوڑوں جي هڪ فهرست واپس ڪري ٿو (جيئن ته اسان جو نقشو صرف اهڙن داخلن جوڙن تي مشتمل آهي، اسان جوڙن تي ٻيهر ورجائيندا آهيون، ۽ الڳ الڳ ڪيچ يا قدر نه). نتيجو: 212133=Lidiya Arkadyevna Bublikova 8082771=Donald John Trump 162348=Ivan Mikhailovich Serebryakov هن آرٽيڪل کي مستقبل لاءِ محفوظ ڪريو: https://habr.com/ru/post/128017/ هاڻي ان کي پڙهڻ لاءِ تمام جلدي آهي، پر مستقبل ۾ ، جڏھن توھان ھٿ ميپ استعمال ڪرڻ تي ھٿ حاصل ڪندا، اھو توھان کي سمجھڻ ۾ مدد ڏيندو ته ھي ڊيٽا جو ڍانچو اندر کان ڪيئن ڪم ڪري ٿو. پڻ، چيڪ ڪرڻ نه وساريو سرڪاري Oracle دستاويزن تي HashMap.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION