CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ TreeMap
John Squirrels
سطح
San Francisco

جاوا ۾ TreeMap

گروپ ۾ شايع ٿيل
جيڪڏهن توهان هي مضمون پڙهي رهيا آهيو، توهان گهڻو ڪري واقف آهيو نقشي جي انٽرفيس سان ۽ ڪٿي مناسب طريقي سان لاڳو ڪري سگهجي ٿو. جيڪڏهن نه، پوء هتي اچو . اڄ اسين جاوا TreeMap جي عمل جي خاصيتن جي باري ۾ ڳالهائينداسين، ۽ خاص طور تي، اهو ڪيئن HashMap کان مختلف آهي ۽ ڪيئن ان کي صحيح طريقي سان استعمال ڪجي.

TreeMap، HashMap، ۽ LinkedHashMap جي مقابلي ڪرڻ

نقشي جي انٽرفيس جو سڀ کان وڌيڪ استعمال ٿيل عمل آهي HashMap. اهو استعمال ڪرڻ آسان آهي ۽ ڊيٽا تائين جلدي رسائي جي ضمانت ڏئي ٿو، تنهنڪري اهو سڀ کان وڌيڪ مسئلا حل ڪرڻ لاء بهترين اميدوار آهي. گهڻا، پر سڀ نه. ڪڏهن ڪڏهن توهان کي منظم طريقي سان ڊيٽا کي ذخيرو ڪرڻ جي ضرورت آهي ۽ ان جي ذريعي نيويگيٽ ڪرڻ جي قابل ٿي. انهي صورت ۾، نقشي جي انٽرفيس (TreeMap) جو هڪ ٻيو عمل بچاء لاء اچي ٿو. TreeMap NavigableMap انٽرفيس کي لاڳو ڪري ٿو، جيڪو ورثي ۾ ملي ٿو SortedMap ، جيڪو بدلي ۾ Map انٽرفيس کي ورثي ۾ ڏئي ٿو. NavigableMap ۽ SortedMapTreeMap جون خاصيتون - 2 انٽرفيس کي لاڳو ڪرڻ سان ، TreeMap اضافي ڪارڪردگي حاصل ڪري ٿو جيڪا HashMap ۾ موجود ناهي، پر اها ڪارڪردگي جي لحاظ کان قيمت ادا ڪري ٿي. هتي پڻ آهي LinkedHashMap ڪلاس، جيڪو توهان کي ڊيٽا کي هڪ مخصوص ترتيب ۾ ذخيرو ڪرڻ جي اجازت ڏئي ٿو (جنهن ۾ توهان ان کي نقشي ۾ شامل ڪيو). انهن ٽنهي طبقن جي وچ ۾ فرق کي سمجهڻ لاءِ ، هن جدول کي ڏسو:
HashMap LinkedHashMap وڻن جو نقشو
ڊيٽا ترتيب ڏيڻ بي ترتيب. ڪابه ضمانت نه آهي ته آرڊر وقت سان برقرار رکيو ويندو. انهي ترتيب ۾ جنهن ۾ ڊيٽا شامل ڪئي وئي آهي چڙهندڙ ترتيب ۾ يا هڪ مخصوص مقابلي جي بنياد تي
وقت جي پيچيدگي او (1) او (1) او (لاگ (ن))
لاڳو ٿيل انٽرفيس نقشو نقشو Navigable Map
ترتيب ڏنل
نقشو نقشو
ڊيٽا جي جوڙجڪ ٻڪريون ٻڪريون ڳاڙهو-ڪارو وڻ
null key لاءِ سپورٽ؟ ها ها ها، جيڪڏهن توهان هڪ موازنہ استعمال ڪريو ٿا، اهو null جي اجازت ڏئي ٿو
موضوع محفوظ؟ نه نه نه
جئين توهان ڏسي سگهو ٿا، انهن طبقن ۾ تمام گهڻو عام آهي، پر اتي پڻ ڪيترائي اختلاف آهن. جيتوڻيڪ TreeMap ڪلاس سڀ کان وڌيڪ ورڇيل آهي، اهو هميشه null کي هڪ ڪنجي طور ذخيرو نٿو ڪري سگهي. اضافي طور تي، TreeMap جي عناصر تائين رسائي تمام گهڻي وقت وٺندو آهي. تنهن ڪري، جيڪڏهن توهان کي ڪجهه ترتيب ڏنل ترتيب ۾ ڊيٽا کي ذخيرو ڪرڻ جي ضرورت ناهي، اهو بهتر آهي HashMap يا LinkedHashMap استعمال ڪرڻ .

ڳاڙهو-ڪارو وڻ

توهان شايد محسوس ڪيو آهي ته، هود جي هيٺان، TreeMap هڪ ڊيٽا جي جوڙجڪ استعمال ڪري ٿو جنهن کي ڳاڙهي-ڪارو وڻ سڏيو ويندو آهي. ھن ڍانچي ۾ ڊيٽا کي محفوظ ڪرڻ بلڪل اھو آھي جيڪو ڊيٽا ترتيب ڏئي ٿو. پوءِ هي ڪهڙي قسم جو وڻ آهي؟ اچو ته ان جو اندازو لڳايو! تصور ڪريو ته توھان کي ذخيرو ڪرڻ جي ضرورت آھي نمبر-اسٽرنگ جوڙو. نمبر 16، 20، 52، 55، 61، 65، 71، 76، 81، 85، 90، 93، ۽ 101 ڪنجيون هونديون. جيڪڏهن توهان ڊيٽا کي روايتي لسٽ ۾ ذخيرو ڪريو ٿا ۽ توهان کي عنصر ڳولڻ جي ضرورت پوندي 101 سان، پوء توهان کي ان کي ڳولڻ لاء سڀني 13 عناصر ذريعي قدم کڻڻ جي ضرورت پوندي. 13 عنصرن لاءِ، اها ڪا وڏي ڳالهه ناهي، پر جڏهن هڪ ملين سان ڪم ڪندي، اسان کي وڏيون مشڪلاتون پيش اينديون. انهن مسئلن کي حل ڪرڻ لاء، پروگرامر استعمال ڪن ٿا ٿورو وڌيڪ پيچيده ڊيٽا جي جوڙجڪ. هي اهو آهي جتي ڳاڙهي-ڪارو وڻ اسٽيج ۾ داخل ٿئي ٿو! TreeMap جون خاصيتون - 3هڪ عنصر جي ڳولا وڻ جي پاڙ کان شروع ٿئي ٿي، جيڪا اسان جي صورت ۾ 61 آهي. پوءِ اسان نوڊ جي قدرن کي ان قدر سان ڀيٽيون ٿا، جيڪا اسان ڳولي رهيا آهيون. جيڪڏهن اسان جو قدر گهٽ آهي، ته پوء اسين کاٻي پاسي وڃون ٿا. جيڪڏهن اهو وڏو آهي ته پوء اسان ساڄي طرف وڃون ٿا. اهو عمل ٻيهر ورجائي ٿو جيستائين اسان مطلوب قدر نه ڳوليون يا هڪ عنصر کي منهن ڏيون جنهن جي قيمت null آهي (وڻ جو هڪ پنو). رنگ ڳاڙهي ۽ ڪارا استعمال ڪيا ويندا آهن وڻ کي آسان ڪرڻ ۽ توازن ڪرڻ لاءِ. اھڙا قاعدا آھن جيڪي ھميشه ھئڻ گھرجي جڏھن ھڪڙو ڳاڙھو ڪارو وڻ ٺاھيو:
  • روٽ ڪارو هجڻ گهرجي.
  • وڻ جا پن ضرور ڪارا هجن.
  • هڪ ڳاڙهي نوڊ ۾ ٻه ڪارو ٻار نوڊس هجڻ گهرجن.
  • هڪ ڪارو نوڊ ڪنهن به رنگ جا ٻار نوڊس ٿي سگهي ٿو.
  • نوڊ کان ان جي پنن تائين هڪ رستو لازمي طور تي ڪارا نوڊس جو ساڳيو تعداد تي مشتمل هوندو.
  • پنن ۾ نوان نوڊ شامل ڪيا ويا آهن.
جيڪڏهن توهان ضابطن 3، 4 ۽ 5 کي گڏ ڪريو ٿا، توهان سمجهي سگهو ٿا ته ڪيئن نوڊ رنگ اسان کي وڻ کي وڌيڪ تيزيءَ سان نيويگيٽ ڪرڻ جي اجازت ڏئي ٿو: ڪارو نوڊس ذريعي هڪ رستو هميشه ڳاڙهي نوڊس کان هڪ کان ننڍو هوندو آهي. ان جي مطابق، وڻ جي ڪل سائيز ڪارو نوڊس جي تعداد سان طئي ڪيو ويندو آهي، جنهن کي "ڪارو اوچائي" سڏيو ويندو آهي. ڳاڙهو-ڪارو وڻ ڊيٽا جي جوڙجڪ مختلف پروگرامنگ ٻولين ۾ لاڳو ڪيو ويو آهي. انٽرنيٽ تي جاوا تي عمل ڪرڻ جا تمام گهڻا آهن، تنهنڪري اسان هتي دير نه ڪنداسين. ان جي بدران، اچو ته TreeMap جي ڪارڪردگي کي ڄاڻڻ جاري رکون.

طريقا جيڪي ترتيب ڏنل ميپ ۽ نيويگيبل ميپ انٽرفيس مان ايندا آهن

HashMap وانگر، TreeMap نقشي جي انٽرفيس کي لاڳو ڪري ٿو، جنهن جو مطلب آهي ته TreeMap وٽ اهي سڀئي طريقا آهن جيڪي HashMap ۾ موجود آهن. پر TreeMap پڻ لاڳو ڪري ٿو ترتيب ڏنل ميپ ۽ نيويگيبل ميپ انٽرفيس، ۽ اھڙي طرح انھن مان اضافي ڪارڪردگي حاصل ڪري ٿي. SortedMap ھڪڙو انٽرفيس آھي جيڪو نقشي کي وڌائي ٿو ۽ ترتيب ڏنل ڊيٽا سيٽ سان لاڳاپيل طريقا شامل ڪري ٿو:
  • firstKey() : نقشي ۾ پهرين عنصر جي ڪنجي موٽائي ٿو
  • lastKey() : آخري عنصر جي ڪنجي واپسي
  • headMap(K end) : هڪ نقشو ڏي ٿو جنهن ۾ موجوده نقشي جا سڀئي عنصر شامل آهن، شروع کان عنصر تائين اهم آخر سان
  • tailMap(K start) : هڪ نقشو ڏي ٿو جنهن ۾ موجوده نقشي جا سڀئي عنصر شامل آهن، شروعاتي عنصر کان آخر تائين
  • subMap(K start, K ​​end) : هڪ نقشو ڏي ٿو جنهن ۾ موجوده نقشي جا سڀئي عنصر شامل آهن، شروعاتي عنصر کان عنصر تائين اهم آخر سان.
NavigableMap ھڪڙو انٽرفيس آھي جيڪو وڌايو آھي ترتيب ڏنل نقشو ۽ نقشي جي عناصر جي وچ ۾ نيويگيٽ ڪرڻ جا طريقا شامل ڪري ٿو:
  • firstEntry() : پهريون اهم-قدر جوڙو موٽائي ٿو
  • lastEntry() : آخري اهم-قدر جوڙو موٽائي ٿو
  • pollFirstEntry() : پهريون جوڙو واپسي ۽ حذف ڪري ٿو
  • pollLastEntry() : آخري جوڙو واپسي ۽ ختم ڪري ٿو
  • ceilingKey(K obj) : ننڍي ۾ ننڍي ڪيئي k موٽائي ٿو جيڪا ڪيئي اعتراض کان وڏي يا برابر آهي. جيڪڏهن ڪا به اهڙي ڪيڏي نه آهي، واپسي null
  • floorKey(K obj) : سڀ کان وڏي ڪيئي k واپس ڏئي ٿي جيڪا ڪيئي اعتراض کان گهٽ يا برابر آهي. جيڪڏهن ڪا به اهڙي ڪيڏي نه آهي، واپسي null
  • LowerKey(K obj) : سڀ کان وڏي ڪيئي k موٽائي ٿو جيڪا ڪيئي اعتراض کان گهٽ آهي. جيڪڏهن ڪا به اهڙي ڪيڏي نه آهي، واپسي null
  • HigherKey(K obj) : سڀ کان ننڍي ڪيئي k واپس ڪري ٿي جيڪا ڪيئي اعتراض کان وڏي آهي. جيڪڏهن ڪا به اهڙي ڪيڏي نه آهي، واپسي null
  • ceilingEntry(K obj) : ceilingKey(K obj) طريقي سان ملندڙ، صرف هڪ اهم-قدر جوڙو واپس ڪري ٿو (يا null)
  • floorEntry(K obj) : فلورڪي (K obj) طريقي سان ملندڙ، صرف هڪ اهم-قدر جوڙو (يا null) موٽائي ٿو
  • LowEntry(K obj) : LowerKey(K obj) طريقي سان ملندڙ، صرف هڪ اهم-قدر جوڙو (يا null) موٽائي ٿو
  • HighEntry(K obj) : HigherKey(K obj) طريقي سان ملندڙ، صرف هڪ اهم-قدر جوڙو (يا null) موٽائي ٿو
  • descendingKeySet() : هڪ NavigableSet موٽائي ٿو جنهن ۾ سڀني ڪنجين کي ريورس آرڊر ۾ ترتيب ڏنو ويو آهي
  • descendingMap() : هڪ NavigableMap ڏي ٿو جنهن ۾ سڀني جوڙن کي ريورس آرڊر ۾ ترتيب ڏنو ويو آهي
  • navigableKeySet() : هڪ NavigableSet اعتراض واپس ڪري ٿو جنهن ۾ اهي سڀئي ڪنجيون شامل آهن ترتيب ۾ جنهن ۾ اهي ذخيرو ٿيل آهن
  • headMap(K upperBound، boolean incl) : ھڪڙو نقشو موٽائي ٿو جنھن ۾ جوڙو شامل آھي شروع کان مٿئين بائونڊ عنصر تائين. incl پيٽرولر اشارو ڪري ٿو ته ڇا واپسي نقشي ۾ اپر بائونڊ عنصر شامل ڪيو وڃي
  • tailMap(K LowerBound، boolean incl) : ڪارڪردگي اڳئين طريقي سان ملندڙ جلندڙ آهي، صرف لوئر بائونڊ کان آخر تائين جوڙو موٽائي ٿو
  • subMap(K LowerBound، boolean lowIncl، K upperBound، boolean highIncl) : جيئن ته پوئين طريقن سان، واپسي جوڙو لوئر بائونڊ کان اپر بائونڊ تائين؛ دلائل lowIncl ۽ highIncl ظاهر ڪن ٿا ته ڇا نئين نقشي ۾ حد جي عنصرن کي شامل ڪيو وڃي.
عام اڏاوتن کان علاوه، TreeMap وٽ ھڪڙو ٻيو ٺاھيندڙ آھي جيڪو ھڪڙي نموني جي مقابلي کي قبول ڪري ٿو. هي موازنہ ان ترتيب لاءِ ذميوار آهي جنهن ۾ عناصر محفوظ ٿيل آهن.

TreeMap جا مثال

اضافي طريقن جي اها گهڻائي غير ضروري لڳي سگهي ٿي، پر اهي توهان جي پهرين نظر ۾ محسوس ڪرڻ کان وڌيڪ ڪارائتو ثابت ٿي سگهن ٿا. اچو ته هيٺ ڏنل مثال کي گڏ ڪريون. تصور ڪريو ته اسان هڪ وڏي ڪمپني جي مارڪيٽنگ ڊپارٽمينٽ ۾ ڪم ڪريون ٿا، ۽ اسان وٽ ماڻهن جو ڊيٽابيس آهي، جن کي اسان اشتهار ڏيکارڻ چاهيون ٿا. ذهن ۾ رکڻ لاء ٻه تفصيل آهن:
  • اسان کي هر شخص جي نقوش جي تعداد جي ٽريڪ رکڻ جي ضرورت آهي
  • نابالغ لاءِ اشتهار ڏيکارڻ جو الگورٿم مختلف آهي.
اچو ته هڪ پرسن ڪلاس ٺاهيون، جنهن ۾ هر فرد بابت سموري لاڳاپيل معلومات محفوظ ڪئي ويندي:
public class Person {
   public String firstName;
   public String lastName;
   public int age;

   public Person(String firstName, String lastName, int age) {
       this.firstName = firstName;
       this.lastName = lastName;
       this.age = age;
   }
}
اسان منطق کي مين ڪلاس ۾ لاڳو ڪريون ٿا:
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

public class Main {
   public static void main(String[] args) {
      TreeMap<Person, Integer> map = new TreeMap<>(Comparator.comparingInt(o -> o.age));
      map.put(new Person("John", "Smith", 17), 0);
      map.put(new Person("Ivan", "Petrenko", 65), 0);
      map.put(new Person("Pedro", "Escobar", 32), 0);
      map.put(new Person("Shirley", "Hatfield", 14), 0);
      map.put(new Person("Abby", "Parsons", 19), 0);

      Person firstAdultPerson = map.navigableKeySet().stream().filter(person -> person.age>18).findFirst().get();

       Map<Person, Integer> youngPeopleMap = map.headMap(firstAdultPerson, false);
       Map<Person, Integer> adultPeopleMap = map.tailMap(firstAdultPerson, true);
       showAdvertisementToYoung(youngPeopleMap);
       showAdvertisementToAdult(adultPeopleMap);
   }

   public static void showAdvertisementToYoung(Map map) {}
   public static void showAdvertisementToAdult(Map map) {}
}
مکيه ڪلاس ۾، هڪ TreeMap ٺاهيو، جنهن ۾ هر ڪيئي هڪ مخصوص شخص جي نمائندگي ڪري ٿي، ۽ هر قيمت هن مهيني اشتهارن جي نقوش جو تعداد آهي. اسان ٺاھيندڙ کي ھڪڙو موازنہ پاس ڪري ٿو جيڪو ماڻھن کي عمر جي لحاظ کان ترتيب ڏئي ٿو. اسان نقشي کي خودمختيار قدرن سان ڀريندا آهيون. هاڻي اسان چاهيون ٿا ته هڪ حوالو حاصل ڪرڻ لاء پهريون بالغ اسان جي ننڍڙي ڊيٽا جي ذخيري ۾. اسان اهو ڪريون ٿا اسٽريم API استعمال ڪندي. پوءِ اسان کي ٻه الڳ نقشا ملن ٿا، جن کي اسين پاس ڪريون ٿا طريقن سان جيڪي اشتهار ڏيکارين ٿا. اتي ڪيترائي، ڪيترائي طريقا آھن جيڪي اسان ھن ڪم کي پورو ڪري سگھون ٿا. TreeMap ڪلاس جي طريقن جو هٿيار اسان کي هر ضرورت لاءِ ڪسٽمائيز حل ٺاهڻ جي اجازت ڏئي ٿو. توهان کي انهن سڀني کي ياد رکڻ جي ضرورت ناهي، ڇو ته توهان هميشه پنهنجي IDE مان دستاويز يا تجويزون استعمال ڪري سگهو ٿا. جيڪو توهان سکيو ان کي مضبوط ڪرڻ لاءِ، اسان توهان کي اسان جي جاوا ڪورس مان هڪ وڊيو سبق ڏسڻ جي صلاح ڏيون ٿا
اهو سڀ ڪجهه هاڻي لاء آهي! مون کي اميد آهي ته TreeMap ڪلاس هاڻي توهان لاءِ واضح آهي، ۽ توهان ان کي عملي ڪوڊنگ جي ڪمن کي حل ڪرڻ ۾ صحيح طريقي سان لاڳو ڪندا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION