ההבדל בין מערכים לערייטים

Anonim

Arrays לעומת Arraylists

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

-> ->

מה הם מערכים?

מוצג בתרשים 1, הוא פיסת קוד המשמשת בדרך כלל להכריז ולהקצות ערכים למערך. איור 2 מתאר כיצד ייראה מערך בזיכרון.

ערכי int [5];

ערכים [0] = 100;

ערכים [1] = 101;

ערכים [2] = 102;

ערכים [3] = 103;

ערכים [4] = 104;

איור 1: קוד להצהרה והקצאת ערכים למערך

100 101 102 103 104
אינדקס: 0 1 2 < 3 4
איור 2: מערך המאוחסן בזיכרון

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

מה הם Arraylists?

arraylist יכול להיראות מערך דינמי, אשר יכול לגדול בגודל. לכן arraylists הם אידיאליים לשימוש במצב שבו אתה לא יודע את גודל האלמנטים הנדרשים בזמן ההצהרה. ב Java, arraylists יכול להחזיק רק אובייקטים, הם לא יכולים להחזיק סוגי פרימיטיביים ישירות (אתה יכול לשים את סוגי פרימיטיבי בתוך אובייקט או להשתמש בכיתה מעטפת של סוגים פרימיטיביים). בדרך כלל, מערך רשימות מספק שיטות לביצוע החדרה, מחיקה וחיפוש. זמן המורכבות של גישה אלמנט הוא o (1), בעוד הכניסה ומחיקה יש המורכבות זמן של o (n). ב Java, arraylists ניתן לחצות באמצעות לולאות foreach, איטרטורים או פשוט באמצעות המדדים.

מה ההבדל בין מערכים לעריליסטים

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