Map و HashMap
Map هي خريطة تخزن بيانات بمفتاح-قيمة. في هذا الدرس، سنتعلم كيفية استخدامها.
إنشاء HashMap
JAVA
import java.util.HashMap;
import java.util.Map;
// خريطة فارغة
Map<String, Integer> ages = new HashMap<>();
// خريطة بقيم أولية
Map<String, Integer> scores = new HashMap<>(Map.of(
"أحمد", 95,
"محمد", 88,
"علي", 92
));
العمليات الأساسية
إضافة عناصر
JAVA
Map<String, Integer> ages = new HashMap<>();
ages.put("أحمد", 25); // إضافة مفتاح-قيمة
ages.put("محمد", 30);
ages.put("أحمد", 26); // تحديث القيمة (المفتاح فريد)
الوصول للقيم
JAVA
Map<String, Integer> ages = new HashMap<>(Map.of("أحمد", 25، "محمد", 30));
int age = ages.get("أحمد"); // 25
int ageOrDefault = ages.getOrDefault("علي", 0); // 0 (قيمة افتراضية)
boolean has = ages.containsKey("محمد"); // true
boolean hasValue = ages.containsValue(30); // true
int size = ages.size(); // 2
حذف العناصر
JAVA
Map<String, Integer> ages = new HashMap<>(Map.of("أحمد", 25، "محمد", 30));
ages.remove("محمد"); // حذف بال מפתח
ages.remove("أحمد", 26); // حذف فقط إذا كانت القيمة متطابقة
ages.clear(); // تفريغ
تحديث القيم
JAVA
Map<String, Integer> scores = new HashMap<>();
scores.put("أحمد", 95);
// تحديث مباشر
scores.put("أحمد", 98);
// تحديث بشرط
scores.putIfAbsent("محمد", 88); // يضاف فقط إذا لم يكن موجودًا
// تحديث باستخدام دالة
scores.merge("أحمد", 5, Integer::sum); // أحمد = 95 + 5 = 100
المرور على Map
المرور على المفاتيح
JAVA
Map<String, Integer> ages = new HashMap<>(Map.of("أحمد", 25، "محمد", 30));
for (String name : ages.keySet()) {
System.out.println(name + ": " + ages.get(name));
}
المرور على القيم
JAVA
for (int age : ages.values()) {
System.out.println(age);
}
المرور على الأزواج
JAVA
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
باستخدام forEach
JAVA
ages.forEach((name, age) -> System.out.println(name + ": " + age));
TreeMap — خريطة مرتبة
JAVA
import java.util.TreeMap;
Map<String, Integer> sortedMap = new TreeMap<>();
sortedMap.put("محمد", 30);
sortedMap.put("أحمد", 25);
sortedMap.put("علي", 28);
System.out.println(sortedMap); // {أحمد=25، علي=28، محمد=30} (مرتبة أبجديًا)
LinkedHashMap — خريطة مرتبة بالإدراج
JAVA
import java.util.LinkedHashMap;
Map<String, Integer> orderedMap = new LinkedHashMap<>();
orderedMap.put("محمد", 30);
orderedMap.put("أحمد", 25);
orderedMap.put("علي", 28);
System.out.println(orderedMap); // {محمد=30، أحمد=25، علي=28} (ترتيب الإدراج)
مثال: عداد الكلمات
JAVA
public static Map<String, Integer> countWords(String text) {
Map<String, Integer> counts = new HashMap<>();
String[] words = text.toLowerCase().split("\\s+");
for (String word : words) {
counts.merge(word, 1, Integer::sum);
}
return counts;
}
String text = "Java هي لغة برمجة Java سهلة وممتعة";
Map<String, Integer> wordCounts = countWords(text);
System.out.println(wordCounts); // {java=2، هي=1، لغة=1، برمجة=1، سهلة=1، وممتعة=1}
مثال: ذاكرة التخزين المؤقت (Cache)
JAVA
import java.util.HashMap;
import java.util.Map;
public class SimpleCache<K, V> {
private Map<K, V> cache = new HashMap<>();
private int maxSize;
public SimpleCache(int maxSize) {
this.maxSize = maxSize;
}
public V get(K key) {
return cache.get(key);
}
public void put(K key, V value) {
if (cache.size() >= maxSize) {
// حذف أول عنصر (مبسط)
K firstKey = cache.keySet().iterator().next();
cache.remove(firstKey);
}
cache.put(key, value);
}
public boolean containsKey(K key) {
return cache.containsKey(key);
}
}
مقارنة بين الخرائط
| الميزة | HashMap | TreeMap | LinkedHashMap |
|---|---|---|---|
| الترتيب | بدون | أبجدي | بالإставка |
| الأداء | الأسرع | أبطأ | متوسط |
| null مفتاح | يسمح | لا يسمح | يسمح |
❓ أسئلة شائعة
س ما الفرق بين Map و HashMap؟
ج Map هي الواجهة، HashMap هي التنفيذ.
س ماذا يحدث إذا أضفت مفتاحًا مكررًا؟
ج تتم تحديث القيمة القديمة بالجديدة.
س هل Map آمنة للخيوط؟
ج HashMap ليست آمنة. استخدم ConcurrentHashMap للخيوط المتعددة.
📖 ملخص
- Map: خريطة مفتاح-قيمة
- HashMap: الأسرع، بدون ترتيب
- TreeMap: مرتبة أبجديًا
- LinkedHashMap: مرتبة بالإставка
- العمليات: put، get، remove، containsKey
- المرور: keySet()، values()، entrySet()
📝 تمارين
- دليل هاتف: أنشئ Map من أسماء وأرقام هواتف
- عداد: أنشئ Map يعد تكرار الكلمات
- مترجم: أنشئ Map تترجم الكلمات من إنجليزي إلى عربي
الدرس التالي
في الدرس التالي، سنتعلم Generics — الأنواع العامة.



