Java Collections Cheatsheet

كلنا عارفين مدى أهمية هياكل البيانات في التطبيقات بتاعتنا ، وقد ايه معرفتنا بنوع المشكلة اللي بنحاول نحلها هو اللي بيحدد نوع هياكل البيانات اللي هنستعملها ، لإن كل واحدة بتتميز بعدة خصائص بتميزها عن الباقيين.
Java Collections Cheatsheet
Java Collections Cheatsheet

المقدمة

كلنا عارفين مدى أهمية هياكل البيانات في التطبيقات بتاعتنا ، وقد ايه معرفتنا بنوع المشكلة اللي بنحاول نحلها هو اللي بيحدد نوع هياكل البيانات اللي هنستعملها ، لإن كل واحدة بتتميز بعدة خصائص بتميزها عن الباقيين.

ولو جينا نشوف ده في الـ Java فهياكل البيانات أو الـ Collections بمعنى أصح اللي بنخزن فيها البيانات متعددة وفيه منهم كتير ، فورقة وقلم وتعالوا نتعرف على الـ Java Collections Cheatsheet ونشوف ايه هي أشهر الـ Collections اللي موجودة في الـ Java ونستعملهم امتة.


Java Collections Cheatsheet

احنا بدايتنا هتكون هل البيانات اللي محتاجين نخزنها عبارة عن مجرد قيم Values ولا محتاج اخزن البيانات على شكل Key/Value Pairs. وبناءا على اجابتنا هنا احنا هنتفرع لفرعين:

  1. محتاجين Values
  2. محتاجين Key/Value Pairs

لو احنا كنا عاوزين نخزن قيم فقط لا غير يعني مجرد Values ، فحد هيقول خلاص احنا ممكن نستعمل الـ ArrayList وهتكون فعالة وكويسة جدًا. ولكن صبرًا مش بنختار الـ Collections بالسرعة دي، احنا محتاجين نفهم طبيعة المشكلة اللي بنحلها الاول فخلونا نكمل.

لو احنا هنخزن مجرد Values فمحتاجين نسأل سؤال مهم هي القيم اللي هنخزنها فيها Duplicates ولا لا ؟

لو عادي نسمح بوجود قيم مقررة يعني Duplicates وقتها هنختار الـ ArrayList كـ Collection نستعمله وهيكون جميل جدًا ومناسب لطبيعة الشغل.

Java Collections Cheatsheet

طب لو مافيش Duplicates ؟ يعني بمعنى أدق عاوزين القيم تبقى مميزة و Unique بدون أي تكرار ؟ حد هيرد بسرعة برضو ويقول ممكن نستعمل الـ HashSet ، هنقوله كلامك صحيح ، ولكن صبرًا احنا محتاجين نفهم طبيعة المشكلة اللي بنحلها الأول .. فخلونا نكمل.

طب لو الاجابة كانت لا وان مافيش Duplicates ؟ محتاجين دلوقتي نسأل سؤال تاني مهم الا وهو .. هي القيم الـ Unique دي اما نخزنها هل بعد كده هنبحث فيهم على حاجات معينة ؟ أو ممكن نضطر نمسح منهم حاجات معينة ؟

لو الاجابة كانت لا .. فوقتها الـ ArrayList هتكون الـ Collection المناسب للاستعمال برضو حتى وانا ماعنديش Duplicates، لاني هيكون عندي مجموعة من القيم وخلاص محتاج احتفظ بيهم وارجعهم على سبيل المثال او محتاج اعدي على كل عنصر اعمل Processing ليه بشكل معين.

لكن لو مافيش Duplicates والقيم عاوزنها تبقى Unique وبدون أي تكرار , محتاجين نفهم هل الترتيب هيكون شكله عامل ازاي ؟ هل هيكون مهم ولا مش مهم .. يعني هل القيم دي عاوزينها تكون مُرتبة Ordered ولا مش فارق معانا الترتيب ؟ لو الترتيب مش فارق معانا فوقتها ممكن نستعمل الـ HashSet بحرية وهيكون خيار مناسب.

ولكن لو الترتيب فارق معانا ؟ محتاجين نعرف هل عاوزين نرتب العناصر بناء على عمليات الـ Insertions اللي دخلت بيهم ؟ ولا بناء على القيم الفعلية ؟ لو بناء على الـ Insertion فوقتها هنختار الـ LinkedHashSet ولكن لو بناء على القيم الفعلية وقتها هنختار الـ TreeSet.

فزي ماحنا شايفين ، احنا مختارناش الـ HashSet علطول من البداية مع عدم وجود Duplicates ؟ ده لان مش بالضرورة يكون ماعنديش Duplicates فاروح استعمله ، لو انا بس عاوز مجرد Collection يحتفظ بالبيانات عشان هعدي عليهم كلهم كده كده واعمل عليهم شغل فالـ ArrayList هتكون أفضل ، ولكن مع معرفتنا ان طبيعة المشكلة متطلبة Searching أو اني اعمل Removal لبعض العناصر , والترتيب كذلك فرق معايا في اختيار نوع الـ HashSet اذ كان هو اللي هستعمله ولا هستعمل الـ LinkedHashSet أو الـ TreeSet.


تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀

النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉

Eqraatech Newsletter | Eqraatech - اقرأ-تِك | Substack
محتوى تقني متميز في مختلف مجالات هندسة البرمجيات باللغة العربية عن طريق تبسيط المفاهيم البرمجية المعقدة بشكل سلس وباستخدام صور توضيحية مذهلة. Click to read Eqraatech Newsletter, a Substack publication with hundreds of subscribers.

بفضل الله قمنا بإطلاق قناة اقرأ-تِك على التليجرام مجانًا للجميع 🚀

آملين بده اننا نفتح باب تاني لتحقيق رؤيتنا نحو إثراء المحتوى التقني باللغة العربية ، ومساعدة لكل متابعينا في انهم يوصلوا لجميع أخبار اقرأ-تِك من حيث المقالات ومحتوى ورقة وقلم والنشرة الأسبوعية وكل جديد بطريقة سريعة وسهلة

مستنينكوا تنورونا , وده رابط القناة 👇

https://t.me/eqraatechcom


بكده نكون خلصنا أول فرع معانا وهو اللي كان فيه مخزنين قيم Values فقط تعالوا نشوف لو هنخزن Key/Value Pairs الوضع هيكون عامل ازاي.

لو انا معايا البيانات بتاعتي عاوز اخزنها على شكل Kay/Value Pairs محتاج برضو افهم هل الترتيب هيفرق معايا ولا لا .. لو مش هيفرق معايا ترتيبهم عامل ازاي , وقتها ممكن استعمل علطول الـ HashMap.

ولكن لو الترتيب هيفرق معايا محتاج اسأل السؤال اللي سألناه مع الـ HashSet هو احنا عاوزين نرتب على حسب الـ Insertion Order ولا على حسب الـ Values ؟ لو على حسب الـ Insertion Order فهنستعمل الـ LinkedHashMap ولو الـ Order على حسب الـ Values فوقتها هنستعمل الـ TreeMap.

💡
هتلاقونا هنا استعملنا نفس الكلام شبه الـ HashSet عشان يبقى سهل عليكم تفتكروهم ، لو عاوزين Insertion Order هنستعمل الـ LinkedHash Implementation سواء مع الـ Map أو الـ Set ولكن لو عاوزين Sorted Values وقتها هنستعمل الـ Tree Implementation سواء مع الـ Map أو الـ Set

في الختام

زي ما شوفنا مع بعض فهمنا لطبيعة المشكلة اللي بنحاول نحلها هيساعدنا في اختيار الـ Collection المناسب وده فعلا من المواضيع المهمة واللي ممكن تفيد بشكل كبير في تحسين اداء التطبيق بصورة كبيرة كونك بس اختارت هياكل البيانات المناسبة واستعملتها في محلها.

اشترك الآن بنشرة اقرأ-تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!