שימוש במערכים אסוציאטיביים

Java:
שימוש במערכים אסוציאטיביים

איך ל:

ג’אווה אינה מכילה מערכים אסוציאטיביים מובנים כמו כמה שפות אחרות, אך היא מספקת את הממשק Map וכיתות כמו HashMap ו-TreeMap למילוי התפקיד הזה. הנה איך להשתמש ב-HashMap:

import java.util.HashMap;
import java.util.Map;

public class LearnMaps {
    public static void main(String[] args) {
        // יצירת HashMap
        Map<String, Integer> ageOfFriends = new HashMap<>();
        
        // הוספת אלמנטים
        ageOfFriends.put("Alice", 24);
        ageOfFriends.put("Bob", 30);
        ageOfFriends.put("Charlie", 28);

        // גישה לאלמנטים
        System.out.println("גילו של אליס: " + ageOfFriends.get("Alice"));
        
        // טיפול במפתחות שאינם קיימים
        System.out.println("גיל של מישהו שלא נמצא במפה: " + ageOfFriends.getOrDefault("Dan", -1));

        // איטרציה על פני אלמנטים
        for (Map.Entry<String, Integer> entry : ageOfFriends.entrySet()) {
            System.out.println(entry.getKey() + " בן " + entry.getValue() + " שנים.");
        }
    }
}

פלט לדוגמה:

גילו של אליס: 24
גיל של מישהו שלא נמצא במפה: -1
אליס בת 24 שנים.
בוב בן 30 שנים.
צ'ארלי בן 28 שנים.

HashMap הוא רק אחת המימושים. אם המפתחות שלך ייחודיים ואתה צריך אותם ממוינים, שקול את TreeMap. עבור מפה ששומרת על סדר ההכנסה, LinkedHashMap הוא החבר שלך.

צלילה עמוקה

מפות בג’אווה הן חלק ממסגרת האוספים, שהוצגה ב-JDK 1.2, אך חוותה שיפורים משמעותיים לאורך השנים, כולל הצגת המתודה forEach בג’אווה 8 לאיטרציה קלה יותר על פני הרשומות. בחירת המימוש של המפה (HashMap, LinkedHashMap, TreeMap) צריכה להתבצע לפי הצרכים הספציפיים שלך בקשר לסדר ולביצועים. לדוגמה, HashMap מציעה ביצועי זמן בסדר O(1) לפעולות הבסיסיות (get ו-put), בהנחה שפונקציית הגיבוב מפזרת את האלמנטים באופן נאות בין הדליים. עם זאת, אם אתה זקוק למיון לפי סדר טבעי או משוואים מותאמים אישית, TreeMap היא האופציה המועדפת, המספקת זמן בסדר O(log n) להכנסה ולחיפוש.

לפני שהוצג הMap, פעמים רבות מערכים אסוציאטיביים היו ממומשים באמצעות שני מערכים מקבילים (אחד למפתחות ואחד לערכים) או מבני נתונים מותאמים אישית עם פחות יעילות. אפשרויות חלופיות נוכחיות לMap ולמימושים שלו עשויות לכלול ספריות צד שלישי המציעות מפות מתמחות, כגון מפות דו-כיווניות (BiMap בספריית Guava של Google) למקרים בהם אתה צריך למצוא מפתח לפי הערך שלו בצורה יעילה. עם זאת, לרוב המקרים בג’אווה, מפות הספרייה הסטנדרטית עמידות וגמישות מספיק כדי להתמודד עם המשימה.