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. نقشي جي ڪنجين کي ڪيئن ترتيب ڏيو
نقشن کي ترتيب ڏيڻ پڻ پروگرامنگ ۾ ھڪڙو عام عمل آھي. توھان ھن کي ڪيترن ئي طريقن سان ڪري سگھو ٿا:-
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));
-
استعمال ڪريو
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 مکيه عمل آهن. انهن مان هر هڪ پنهنجي خاصيتون آهن:-
عناصر جي ترتيب.
HashMap
۽Hashtable
ضمانت نه ڏيو ته شيون محفوظ ڪيون وينديون ترتيب ۾ اهي شامل ڪيا ويا. ان کان سواء، اهي ضمانت نه ڏيندا آهن ته عناصر جي ترتيب وقت سان تبديل نه ٿيندي. موڙ ۾،TreeMap
اهو عناصر جي اسٽوريج جي ضمانت ڏئي ٿو ترتيب ۾ اهي شامل ڪيا ويا آهن يا ڏنل مقابلي جي مطابق. -
صحيح قدر.
HashMap
توهان کي اجازت ڏئي ٿي هڪ ڪنجي ۽ هڪ نيل قدر،HashTable
نه. TreeMap صرف null قدر استعمال ڪري سگھي ٿو جيڪڏھن comparator ان کي اجازت ڏئي. ڪامريڊ استعمال ڪرڻ کان سواءِ (جنهن ترتيب سان جوڙيو ويو انهن کي ذخيرو ڪرڻ سان)، null جي اجازت ناهي. -
هم وقت سازي. صرف هم
HashTable
وقت سازي، باقي نه آهن. جيڪڏهن نقشي تائين مختلف موضوعن جي ذريعي رسائي نه ڪئي ويندي، اهو HashTable جي بدران HashMap استعمال ڪرڻ جي صلاح ڏني وئي آهي.
HashMap | هيش ٽيبل | وڻن جو نقشو | |
---|---|---|---|
عناصر جي ترتيب | نه | نه | ها |
قدر جي طور تي null | ها | نه | سچي نه |
تار جي حفاظت | نه | ها | نه |
عناصر جي ڳولا جي الگورتھمڪ پيچيدگي | او (1) | او (1) | او (لاگ ن) |
هود هيٺ ڊيٽا جي جوڙجڪ | hash ٽيبل | hash ٽيبل | ڳاڙهو-ڪارو وڻ |
5. هڪ ٻه طرفي نقشو ڪيئن ٺاهيو
ڪڏهن ڪڏهن اهو ضروري ٿئي ٿو ته ڊيٽا جي جوڙجڪ کي استعمال ڪيو وڃي جنهن ۾ ٻنهي ڪنجيون ۽ قيمتون منفرد هونديون، اهو آهي، نقشي ۾ ڪني-ڪي جوڙو شامل هوندو. هي ڊيٽا جو ڍانچو توهان کي نقشي تي ”انٽرٽ ٿيل ڏيک/سرچ“ ٺاهڻ جي اجازت ڏئي ٿو. اهو آهي، اسان ان جي قيمت جي لحاظ کان هڪ اهم ڳولي سگهون ٿا. هن ڊيٽا جي جوڙجڪ کي ٻه طرفي نقشو سڏيو ويندو آهي، جيڪو بدقسمتي سان JDK پاران سهڪار نه آهي. پر، خوشقسمتيءَ سان، ان جو نفاذ Apache Common Collections يا Guava لائبريرين ۾ ملي سگهي ٿو. اتي ان کي سڏيو ويندو آهي BidiMap ۽ BiMap، ترتيب سان. اهي عملدرآمد ڪنجين ۽ قدرن جي انفراديت تي پابنديون لاڳو ڪن ٿا. اهو هڪ ٻئي سان تعلق پيدا ڪري ٿو.6. هڪ خالي نقشو ڪيئن ٺاهيو
خالي نقشو ٺاھڻ جا ٻه طريقا آھن:-
عام اعتراض جي شروعات:
Map<Integer, String> emptyMap = new HashMap<>();
-
هڪ ناقابل تبديل خالي نقشو ٺاهڻ:
Map<Integer, String> emptyMap = Collections.emptyMap();
UnsupportedOperationException
استثنا. هن آرٽيڪل ۾، اسان سڀ کان وڌيڪ عام سوالن تي غور ڪيو جيڪي توهان وٽ هوندا جڏهن نقشي جي انٽرفيس کي استعمال ڪندي.
GO TO FULL VERSION