מכל (טיפוס נתונים מופשט)

במדעי המחשב, מְכָל (באנגלית: Container) הוא מחלקה, מבנה נתונים, או טיפוס נתונים מופשט (ADT) שמופעו מכיל אוסף של אובייקטים אחרים. במילים אחרות, הם מאחסנים אובייקטים בצורה מאורגנת על פי כללים מסוימים. קיימים מימושים שונים של המכל (בצורת הורשה), שלכל אחד מהם גודל וסיבוכיות פעולות שונים, המאפשרים גמישות בבחירת המכל המתאים לכל בעיה.

פונקציות ומאפייני מכלים 
מכלים מאופיינים בעזרת שלוש התכונות הבאות:
 צורת גישה:הדרך בה ניגשים לאובייקטים של המכל. הגישה יכולה להיעשות על פי אינדקס (כמו במערכים), לפי LIFO (כמו במחסנית), לפי FIFO (כמו בתורים) וכדומה.
 אחסון: צורת האחסון של האובייקט במכל. ניתן לאחסן העתק שלם של האובייקט (ברמות עומק שונות) או מצביע אל האובייקט.
 הזזה: צורת ההזזה של אובייקטים במכל.

מחלקות מכלים צפויות לממש את המתודות הבאות:
 יצירת מכל ריק (בנאי);
 הכנסת עצמים לתוך המכל;
 מחיקת אובייקטים מן המכל;
 מחיקת כל האובייקטים בתוך המכל;
 גישה אל העצמים במכל;

לעיתים מכלים ממומשים ביחד עם איטרטורים

סוגים 
מכלים מסווגים כמכל חד-ערכי או מכל אסוציאטיבי.

מכל חד-ערכי מאחסן כל אובייקט באופן עצמאי. ניתן לגשת לאובייקטים בצורה ישירה או בעזרת איטרטורים.

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

מימושים 
 .NET: System.Collections (MSDN)
 Cּּּּּ++: הספרייה הסטנדרטית של השפה (SC++L) 
 ג'אווה: Java collections framework
 Objective-C: חלק מהFoundation Kit
 PL/SQL, אוספים
 פייתון: כוללת מכלים מובנים (רשימה, מילון, טאפל וכו') וניתן להרחיב בעזרת המודול collections הזה
 סקאלה: קיימים מכלים הניתנים לשינוי ושלא ניתנים לשינוי בחבילות scala.collection.mutable ו-scala.collection.immutable

ראו גם
 מבנה נתונים

קישורים חיצוניים 
 מכל מבנה נתונים הכרזה ואתחול
 מכל מבני נתונים
 Python SortedContainers מודול. יישום מהיר של הרשימה הממוינת, מיון dict, ממוינים להגדיר סוגי נתונים בפייתון.

הערות שוליים

תכנות מונחה-עצמים