CodeGym /جاوا بلاگ /Random-SD /HashMap: هي ڪهڙي قسم جو نقشو آهي؟
John Squirrels
سطح
San Francisco

HashMap: هي ڪهڙي قسم جو نقشو آهي؟

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

سو، اسان کي جاوا ۾ 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, "Bridget Logan");
       passportsAndNames.put (162348, "Ivan the Great");
       passportsAndNames.put(8082771, "Donald John Trump");
       System.out.println(passportsAndNames);
   }
}
اسان ان لاءِ طريقو put() استعمال ڪندا آهيون. اضافي طور تي، HashMap کي ختم ڪري ٿو toString() طريقو، تنهنڪري اهو ڪنسول تي ڏيکاري سگهجي ٿو. آئوٽ پٽ هن طرح نظر ايندو: {212133=برجٽ لوگن، 8082771=ڊونالڊ جان ٽرمپ، 162348=آئون دي گريٽ} هاڻي اچو ته تصديق ڪريون ته ڇا ڪيز واقعي منفرد آهن؟ اچو ته هڪ نئين عنصر کي شامل ڪرڻ جي ڪوشش ڪريون هڪ ڪنجي سان جيڪو اڳ ۾ ئي نقشي ۾ استعمال ڪيو ويو آهي:
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);
}
ٻاھر نڪتو: {212133=برجٽ لوگن، 8082771=ڊونالڊ جان ٽرمپ، 162348=البرٽ ڪينٽ} جيئن توھان ڏسي سگھو ٿا، اڳئين قدر سان لاڳاپيل ڪيئي 162348 اوور رائٽ ڪيو ويو. اسان هڪ سبب لاءِ ”ڪي“ اصطلاح استعمال ڪندا آهيون. HashMap ۾ قيمتون ڪي استعمال ڪندي پهچن ٿيون، پر ٻئي طريقي سان نه. ڪي قدر استعمال ڪري حاصل نه ٿو ڪري سگھجي، ڇو ته قدر منفرد نه ٿي سگھي. اهو واضح طور تي ڏسي سگھجي ٿو جڏهن حاصل ڪرڻ يا هٽائڻ واري عنصر 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);
}
هڪ قدر حاصل ڪرڻ يا ڊڪشنري مان هڪ جوڙو هٽائڻ لاءِ، اسان کي ضرور پاس ڪرڻ گهرجي get() ۽ هٽايو() منفرد ڪيئي جيڪا قدر سان ملندڙ آهي. صفن ۽ فهرستن جي برعڪس، جاوا ۾ هڪ HashMap ۾ ڪو به عددي انڊيڪس نه آهي: قدرن تائين رسائي ڪيئي استعمال ڪندي آهي. ڪنسول آئوٽ: Bridget Logan {212133=Bridget Logan, 8082771=Donald John Trump} ArrayList ۽ LinkedList ڪلاس اسان کي چيڪ ڪرڻ ڏيو ته ڇا لسٽ ۾ ڪو خاص عنصر شامل آھي. Java HashMap اسان کي اهو ڪرڻ جي اجازت ڏئي ٿي. وڌيڪ ڇا آهي، اسان اهو ڪري سگهون ٿا جوڙو جي ٻنهي ميمبرن لاءِ: هي اهو آهي جيڪو containsKey() (هڪ چيڪ لاءِ چيڪ ڪري ٿو) ۽ containsValue() (هڪ قدر جي چڪاس) طريقن لاءِ آهن.
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 جاوا ۾ HashMap جي هڪ ٻي آسان خصوصيت اها حقيقت آهي ته توهان حاصل ڪري سگهو ٿا الڳ فهرستن جي سڀني ڪنجين ۽ سڀني قدرن جي. اهو مڪمل ڪيو ويو آهي keySet() ۽ values() طريقن سان:
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);
   }
}
چابيون هڪ سيٽ ۾ ڪڍيا ويا آهن ، جنهن کي اسان اڃا تائين ڍڪي نه ڇڏيو آهي. اهو خاص آهي ته ان ۾ ٻيهر ورجائڻ وارا عنصر شامل نه هوندا. ھاڻي اصلي شيء ياد رکڻ جي آھي ته سڀني چابن جي لسٽ کي HashMap مان حاصل ڪري سگھجي ٿو ھڪڙي الڳ مجموعي ۾. مثال ۾، اسان قدرن کي هڪ عام ArrayList ۾ محفوظ ڪيو . ڪنسول آئوٽ پُٽ: ڪيز: [212133, 8082771, 162348] قدر: [برجٽ لوگن، ڊونالڊ جان ٽرمپ، ايوان دي گريٽ] سائيز () ۽ صاف () طريقا بلڪل ساڳيا ڪم ڪن ٿا جيئن اڳئين اڏاوتن ۾ اسان بحث ڪيو آهي: پهريون واپسي عناصر جو تعداد في الحال لغت ۾، ٻيو سڀ عناصر کي ختم ڪري ٿو.
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);
}
آئوٽ: 3 {} چيڪ ڪرڻ لاءِ ته اسان جي HashMap ۾ گهٽ ۾ گهٽ هڪ عنصر آهي ، اسان استعمال ڪري سگهون ٿا 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);
   }
}
آئوٽ پٽ: {212133=برجٽ لوگن، 8082771=ڊونالڊ جان ٽرمپ، 162348=آئون دي گرٽ} هاڻي اسان صرف ابتدائي چڪاس کان پوءِ ڪنسول ڏانهن آئوٽ ڪنداسين. :) هڪ ٻيو دلچسپ نقطو اهو آهي ته ٻه نقشا هڪ ۾ گڏ ڪري سگهجن ٿيون. اهو استعمال ڪندي مڪمل ڪيو putAll() طريقو. اسان ان کي پهرين HashMap تي سڏين ٿا ، ٻئي کي دليل طور پاس ڪريو، ۽ ٻئي کان عناصر پهرين ۾ شامل ڪيا ويا آهن:
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);
}
ٻاھر نڪتو: {917352=ڪلفورڊ پيٽرڪ، 212133=برجٽ لوگن، 8082771=ڊونالڊ جان ٽرمپ، 925648=مچل سالگاڊو، 162348=آئون دي گریٹ} پاسپورٽ ۾ سڀ جوڙا ۽ نالا 2 پاسپورٽ جي نالي تي نقل ڪيا ويا آھن . هاڻي هڪ وڌيڪ پيچيده مثال تي غور ڪريو. خاص طور تي، هڪ لوپ ۾ HashMap مٿان ٻيهر ورجائي .
for (Map.Entry<Integer, String> entry: passportsAndNames.entrySet()) {
   System.out.println(entry);
}
Map.Entry ڪلاس ڊڪشنريءَ اندر اهم-قدر جوڙو ڏيکاري ٿو . entrySet () طريقو اسان جي HashMap ۾ سڀني جوڑوں جي فهرست واپس ڪري ٿو . ڇاڪاڻ ته اسان جو نقشو انهن Map.Entry جوڑوں تي مشتمل آهي، اسان جوڙن تي ٻيهر ورجائي رهيا آهيون، نه ڪي الڳ ڪيچ يا قدر. ٻاھر نڪتو: 212133=برجٽ لوگن 8082771=ڊونالڊ جان ٽرمپ 162348=Ivan the Great پڻ، HashMap لاءِ سرڪاري Oracle دستاويزن جو مطالعو ڪرڻ نه وساريو .
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION