JavaRush /جاوا بلاگ /Random-SD /نقشي جي انٽرفيس بابت سڀ کان وڌيڪ مشهور سوالن جا جواب

نقشي جي انٽرفيس بابت سڀ کان وڌيڪ مشهور سوالن جا جواب

گروپ ۾ شايع ٿيل
سلام! اڄ اسان نقشي بابت سڀ کان عام سوالن جا جواب ڏينداسين، پر پهرين، اچو ته ياد رکون ته اهو ڇا آهي. نقشي جي انٽرفيس بابت سڀ کان وڌيڪ مشهور سوالن جا جواب - 1هڪ نقشو هڪ ڊيٽا جي جوڙجڪ آهي جنهن ۾ اهم-قدر جوڑوں جو هڪ سيٽ شامل آهي. ان جي ڊيٽا جي جوڙجڪ هڪ لغت وانگر آهي، ڇو ته اهو اڪثر ڪري سڏيو ويندو آهي. ساڳئي وقت، نقشو هڪ انٽرفيس آهي ، ۽ معياري jdk ۾ ان ۾ مکيه عمل شامل آهن: Hashmap، LinkedHashMap، Hashtable، TreeMap. سڀ کان وڌيڪ استعمال ٿيل عمل آهي Hashmap، تنهنڪري اسان ان کي اسان جي مثالن ۾ استعمال ڪنداسين. اھو اھو آھي جيڪو ھڪڙي نقشي جي معياري تخليق ۽ ڀرڻ جھڙو آھي:
Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
۽ هي آهي ڪيئن قدر حاصل ڪرڻ چاٻي ذريعي:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
جيڪڏهن مٿيان سڀ ڪجهه واضح آهي، اچو ته اڳتي وڌون اسان جي مشهور سوالن جا جواب!

0. سڀني نقشي جي قيمتن ذريعي ڪيئن ٻيهر ورجائجي

قدرن تي ورجائي سڀ کان عام آپريشن آھي جيڪو توھان نقشن سان ڪندا آھيو. سڀ اهم-قدر جوڙو اندروني Map.Entry انٽرفيس ۾ ذخيرو ٿيل آهن، ۽ انهن کي حاصل ڪرڻ لاء توهان کي ڪال ڪرڻ جي ضرورت آهي entrySet(). اهو جوڑوں جو هڪ سيٽ واپس ڏئي ٿو جيڪو لوپ ڪري سگهجي ٿو:
for(Map.Entry<Integer, String> entry: map.entrySet()) {
   // get key
   Integer key = entry.getKey();
   // get value
   String value = entry.getValue();
}

Или используя итератор:
Iterator<Map.Entry<Integer, String>> itr = map.entrySet().iterator();
while(itr.hasNext()) {
   Map.Entry<Integer, String> entry =  itr.next();
   // get key
   Integer key = entry.getKey();
   // get value
   String value = entry.getValue();
}

1. ڪيئن بدلجي نقشي کي لسٽ ۾

نقشي جي انٽرفيس ۾ 3 طريقا آھن جيڪي عناصر جي ھڪڙي فهرست واپس ڪن ٿا:
  • keySet() - چاٻين جو هڪ سيٽ موٽائي ٿو؛
  • قدر () - قدرن جو مجموعو موٽائي ٿو؛
  • entrySet() - ڪيئي-ويل سيٽ جو هڪ سيٽ واپس ڏئي ٿو.
جيڪڏھن توھان ڪلاس جي ٺاھيندڙن کي ڏسندا ArrayList، توھان ڏسندؤ ته اتي ھڪڙو ٺاھيندڙ آھي جنھن ۾ قسم جي جمع جي دليل سان. جيئن ته سيٽ ڪليڪشن جو اولاد آهي، مٿين سڀني طريقن جا نتيجا ڪلاس جي تعمير ڪندڙ کي منظور ڪري سگھجن ٿا ArrayList. تنهن ڪري اسان نئين لسٽ ٺاهينداسين ۽ انهن کي قيمتن سان ڀرينداسين Map:
// key list
List<Integer> keyList = new ArrayList<>(map.keySet());
// value list
List<String> valueList = new ArrayList<>(map.values());
// key-value list
List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map.entrySet());

2. نقشي جي ڪنجين کي ڪيئن ترتيب ڏيو

نقشن کي ترتيب ڏيڻ پڻ پروگرامنگ ۾ ھڪڙو عام عمل آھي. توھان ھن کي ڪيترن ئي طريقن سان ڪري سگھو ٿا:
  1. Map.Entry کي لسٽ ۾ رکو ۽ ان کي ترتيب ڏيو Comparator استعمال ڪندي .

    موازنہ ڪندڙ ۾ اسان صرف جوڑوں جي ڪنجين جو مقابلو ڪنداسين:

    List> list = new ArrayList(map.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
       @Override
       public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
           return o1.getKey() - o2.getKey();
       }
    });
    

    جيڪڏھن توھان سمجھو ٿا ليمبڊاس، ھن داخلا کي خاص طور تي مختصر ڪري سگھجي ٿو:

    Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
  2. استعمال ڪريو SortedMap، يا وڌيڪ صحيح طور تي، ان جي عمل درآمد TreeMap، جيڪو ان جي تعمير ڪندڙ ۾ Comparator وٺندو آهي. هي موازنہ نقشي جي ڪنجين تي لاڳو ڪيو ويندو، تنهنڪري ڪنجين کي لازمي طور تي طبقو هجڻ گهرجي جيڪي انٽرفيس کي لاڳو ڪن ٿا Comparable:

    SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() {
       @Override
       public int compare(Integer o1, Integer o2) {
           return o1 - o2;
       }
    });

    ۽، يقينا، سڀڪنھن شيء کي lambdas استعمال ڪندي ٻيهر لکي سگهجي ٿو:

    SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));

    پهرين طريقي جي برعڪس، SortedMap استعمال ڪندي، اسان هميشه ڊيٽا کي ترتيب ڏنل شڪل ۾ ذخيرو ڪنداسين.

3. نقشي جي قيمتن کي ڪيئن ترتيب ڏيو

ھتي توھان کي چاٻين لاءِ پھرين ھڪڙي جھڙو طريقو استعمال ڪرڻ گھرجي - قدرن جي ھڪڙي فهرست حاصل ڪريو ۽ انھن کي لسٽ ۾ ترتيب ڏيو:
List <Map.Entry<Integer, String>> valuesList = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
   @Override
   public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
       return o1.getValue().compareTo(o2.getValue());
   }
});
۽ هن لاءِ لامبدا هن طرح نظر اچي ٿو:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));

4. HashMap، TreeMap، ۽ Hashtable جي وچ ۾ ڇا فرق آھي

جيئن مٿي ذڪر ڪيو ويو آهي، نقشي جي انٽرفيس جا 3 مکيه عمل آهن. انهن مان هر هڪ پنهنجي خاصيتون آهن:
  1. عناصر جي ترتيب. HashMap۽ Hashtableضمانت نه ڏيو ته شيون محفوظ ڪيون وينديون ترتيب ۾ اهي شامل ڪيا ويا. ان کان سواء، اهي ضمانت نه ڏيندا آهن ته عناصر جي ترتيب وقت سان تبديل نه ٿيندي. موڙ ۾، TreeMapاهو عناصر جي اسٽوريج جي ضمانت ڏئي ٿو ترتيب ۾ اهي شامل ڪيا ويا آهن يا ڏنل مقابلي جي مطابق.

  2. صحيح قدر. HashMapتوهان کي اجازت ڏئي ٿي هڪ ڪنجي ۽ هڪ نيل قدر، HashTableنه. TreeMap صرف null قدر استعمال ڪري سگھي ٿو جيڪڏھن comparator ان کي اجازت ڏئي. ڪامريڊ استعمال ڪرڻ کان سواءِ (جنهن ترتيب سان جوڙيو ويو انهن کي ذخيرو ڪرڻ سان)، null جي اجازت ناهي.

  3. هم وقت سازي. صرف هم HashTableوقت سازي، باقي نه آهن. جيڪڏهن نقشي تائين مختلف موضوعن جي ذريعي رسائي نه ڪئي ويندي، اهو HashTable جي بدران HashMap استعمال ڪرڻ جي صلاح ڏني وئي آهي.

۽ عملن جو هڪ عام مقابلو:
HashMap هيش ٽيبل وڻن جو نقشو
عناصر جي ترتيب نه نه ها
قدر جي طور تي null ها نه سچي نه
تار جي حفاظت نه ها نه
عناصر جي ڳولا جي الگورتھمڪ پيچيدگي او (1) او (1) او (لاگ ن)
هود هيٺ ڊيٽا جي جوڙجڪ hash ٽيبل hash ٽيبل ڳاڙهو-ڪارو وڻ

5. هڪ ٻه طرفي نقشو ڪيئن ٺاهيو

ڪڏهن ڪڏهن اهو ضروري ٿئي ٿو ته ڊيٽا جي جوڙجڪ کي استعمال ڪيو وڃي جنهن ۾ ٻنهي ڪنجيون ۽ قيمتون منفرد هونديون، اهو آهي، نقشي ۾ ڪني-ڪي جوڙو شامل هوندو. هي ڊيٽا جو ڍانچو توهان کي نقشي تي ”انٽرٽ ٿيل ڏيک/سرچ“ ٺاهڻ جي اجازت ڏئي ٿو. اهو آهي، اسان ان جي قيمت جي لحاظ کان هڪ اهم ڳولي سگهون ٿا. هن ڊيٽا جي جوڙجڪ کي ٻه طرفي نقشو سڏيو ويندو آهي، جيڪو بدقسمتي سان JDK پاران سهڪار نه آهي. پر، خوشقسمتيءَ سان، ان جو نفاذ Apache Common Collections يا Guava لائبريرين ۾ ملي سگهي ٿو. اتي ان کي سڏيو ويندو آهي BidiMap ۽ BiMap، ترتيب سان. اهي عملدرآمد ڪنجين ۽ قدرن جي انفراديت تي پابنديون لاڳو ڪن ٿا. اهو هڪ ٻئي سان تعلق پيدا ڪري ٿو.

6. هڪ خالي نقشو ڪيئن ٺاهيو

خالي نقشو ٺاھڻ جا ٻه طريقا آھن:
  1. عام اعتراض جي شروعات:

    Map<Integer, String> emptyMap = new HashMap<>();
  2. هڪ ناقابل تبديل خالي نقشو ٺاهڻ:

    Map<Integer, String> emptyMap =  Collections.emptyMap();
جڏهن اسان اهڙي نقشي ۾ ڊيٽا شامل ڪرڻ جي ڪوشش ڪندا آهيون، اسان وصول ڪنداسين: UnsupportedOperationExceptionاستثنا. هن آرٽيڪل ۾، اسان سڀ کان وڌيڪ عام سوالن تي غور ڪيو جيڪي توهان وٽ هوندا جڏهن نقشي جي انٽرفيس کي استعمال ڪندي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION