📚 LinkedHashMap في جافا: الدليل الشامل للمبتدئين لضبط ترتيب العناصر
مرحباً بك في درس جديد من أكاديمية كودكس! 🎯 اليوم سنتعرف على واحدة من أكثر فئات المجموعات (Collections) فائدة في جافا، وهي LinkedHashMap. إذا كنت قد تعلمت سابقاً عن HashMap، فأنت على وشك اكتشاف نسخة أكثر ذكاءً منها تحافظ على ترتيب إدخالك للعناصر! هيا نبدأ.
🔍 ما هو LinkedHashMap؟
LinkedHashMap هي فئة في جافا تنتمي لحزمة java.util. يمكن وصفها بأنها مزيج قوي بين HashMap و LinkedList. تخيل معي:
- مثل
HashMap: تخزن البيانات على شكل أزواج مفتاح-قيمة (Key-Value). وتوفر أداء سريعاً جداً في عمليات البحث والإضافة والحذف (O(1) في المتوسط). - مثل
LinkedList: تحتفظ بترتيب إدخال العناصر. هذا هو الفرق الرئيسي والسحري الذي يميزها عنHashMapالعادية، التي لا تضمن أي ترتيب للعناصر داخلها.
ببساطة، LinkedHashMap هي HashMap منظمة تحفظ التاريخ الذي أضفت فيه كل عنصر.
⚖️ الفرق الجوهري: HashMap vs LinkedHashMap
لنفهم الفكرة بشكل عملي، دعنا نقارن بمثال بسيط:
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// 1. استخدام HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Zain", 25);
hashMap.put("Sara", 30);
hashMap.put("Ahmed", 22);
System.out.println("ترتيب HashMap: " + hashMap);
// الناتج قد يكون: {Ahmed=22, Zain=25, Sara=30}
// (لا يوجد ترتيب مضمون)
// 2. استخدام LinkedHashMap
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("Zain", 25);
linkedHashMap.put("Sara", 30);
linkedHashMap.put("Ahmed", 22);
System.out.println("ترتيب LinkedHashMap: " + linkedHashMap);
// الناتج سيكون دائماً: {Zain=25, Sara=30, Ahmed=22}
// (نفس ترتيب الإدخال!)
}
}
كما ترى، LinkedHashMap احتفظت بنفس الترتيب الذي أضفنا به الأسماء: زين أولاً، ثم سارة، ثم أحمد. بينما HashMap أعادت ترتيبهم بشكل عشوائي.
🛠️ كيف ننشئ ونستخدم LinkedHashMap؟
إنشاء واستخدام LinkedHashMap سهل جداً ويشبه إلى حد كبير HashMap.
1. الإنشاء والإضافة (put)
import java.util.LinkedHashMap;
public class Main {
public static void main(String[] args) {
// إنشاء كائن LinkedHashMap
LinkedHashMap<String, String> capitals = new LinkedHashMap<>();
// إضافة أزواج مفتاح-قيمة
capitals.put("Saudi Arabia", "Riyadh");
capitals.put("Egypt", "Cairo");
capitals.put("UAE", "Abu Dhabi");
System.out.println(capitals);
// الناتج: {Saudi Arabia=Riyadh, Egypt=Cairo, UAE=Abu Dhabi}
}
}
2. جلب قيمة عن طريق المفتاح (get)
String capitalOfEgypt = capitals.get("Egypt");
System.out.println("Capital of Egypt is: " + capitalOfEgypt); // الناتج: Cairo
3. التحقق من وجود مفتاح أو قيمة (containsKey, containsValue)
boolean exists = capitals.containsKey("Jordan"); // false
boolean existsValue = capitals.containsValue("Doha"); // false
4. إزالة عنصر (remove)
capitals.remove("UAE");
System.out.println(capitals); // الناتج: {Saudi Arabia=Riyadh, Egypt=Cairo}
🔄 التكرار على عناصر LinkedHashMap
نظراً لأن LinkedHashMap تحفظ الترتيب، فإن التكرار على عناصرها سيكون بنفس ترتيب الإدخال، مما يجعل النتائج متوقعة وسهلة الفهم.
التكرار على المفاتيح فقط (keySet)
for (String country : capitals.keySet()) {
System.out.println("Country: " + country);
}
// الناتج:
// Country: Saudi Arabia
// Country: Egypt
// Country: UAE (بنفس ترتيب الإضافة)
التكرار على القيم فقط (values)
for (String capital : capitals.values()) {
System.out.println("Capital: " + capital);
}
التكرار على كل المدخلات (entrySet)
for (Map.Entry<String, String> entry : capitals.entrySet()) {
String country = entry.getKey();
String capital = entry.getValue();
System.out.println(country + " => " + capital);
}
💡 متى نستخدم LinkedHashMap؟
استخدم LinkedHashMap عندما يكون ترتيب إدخال العناصر مهماً لك، مثل:
- إنشاء ذاكرة تخزين مؤقت (LRU Cache): وهو الاستخدام الأشهر. حيث تحذف العناصر الأقل استخداماً مؤخراً.
- تسجيل الأحداث بتسلسل زمني: مثل تسجيل نقاط تحكم في لعبة، أو سجل العمليات.
- عندما تحتاج لإخراج عناصر مرتبة دون استخدام
TreeMap: إذا أردت الترتيب كما أدخلته وليس ترتيباً أبجدياً أو رقمياً.
📝 الخلاصة
LinkedHashMapهيHashMapتحافظ على ترتيب إدخال العناصر.- أداؤها سريع جداً، يشبه أداء
HashMap. - تتعامل مع البيانات كأزواج مفتاح-قيمة.
- استخدامها الأساسي مشابه لـ
HashMapولكن نتائج التكرار فيها منظمة ومتوقعة. - مثالية للحالات التي يكون فيها التسلسل الزمني أو ترتيب الإضافة مهماً.
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال