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) למקרים בהם אתה צריך למצוא מפתח לפי הערך שלו בצורה יעילה. עם זאת, לרוב המקרים בג’אווה, מפות הספרייה הסטנדרטית עמידות וגמישות מספיק כדי להתמודד עם המשימה.