הבדל מפתח – ArrayList לעומת LinkedList
אוספים שימושיים לאחסון נתונים. במערך רגיל, גודל המערך קבוע. לפעמים נדרש ליצור מערכים שיכולים לגדול לפי הצורך. לשפות תכנות כמו Java יש אוספים. זוהי מסגרת עם סט של מחלקות וממשקים. הוא משמש כמיכל לקבוצת אלמנטים. אוספים מאפשרים לאחסן, לעדכן, לאחזר סט של אלמנטים. זה עוזר לעבוד עם מבני נתונים כגון רשימות, סטים, עצים ומפות. הרשימה היא ממשק של Collection framework. ArrayList ו-LinkedList הן שתי מחלקות במסגרת האוספים. הם מיישמים את ממשק האיסוף ואת ממשק הרשימה.מאמר זה דן בהבדל בין ArrayList ל-LinkedList. ArrayList היא מחלקה שמרחיבה את ה- AbstractList ומיישמת את ממשק ה- List, שמשתמש באופן פנימי במערך דינמי לאחסון רכיבי נתונים. LinkedList היא מחלקה שמרחיבה את AbstractSequentialList ומיישמת ממשקי List, Deque ו-Queue, המשתמשים באופן פנימי ברשימה מקושרת כפול לאחסון רכיבי נתונים. זה ההבדל העיקרי בין ArrayList ל-LinkedList.
מה זה ArrayList?
מחלקה ArrayList משמשת ליצירת מערכים דינמיים. בניגוד למערך רגיל, גודלו של מערך דינמי אינו קבוע. אובייקט שנוצר באמצעות מחלקה ArrayList רשאי לאחסן קבוצה של אלמנטים ברשימה. הקיבולת גדלה אוטומטית, כך שהמתכנת יכול להוסיף אלמנטים לרשימה. המחלקה ArrayList מרחיבה את המחלקה AbstractList המיישמת ממשק List. לכן, ניתן להשתמש בשיטות של ממשק List על ידי ArrayList. כדי לגשת לאלמנטים, נעשה שימוש בשיטת get().ניתן להשתמש בשיטת add() כדי להוסיף אלמנטים לרשימה. השיטה remove() משמשת להסרת אלמנט מהרשימה. עיין בתוכנית שלהלן.
איור 01: דוגמה של ArrayList
לפי התוכנית לעיל, נוצר אובייקט של ArrayList. באמצעות שיטת ההוספה, ניתן להוסיף אלמנטים באופן דינמי. האלמנטים "A", "B", "C", "D" ו- "E" מתווספים בשיטת ההוספה. שיטת ההסרה משמשת להסרת אלמנט מהרשימה. כאשר מעבירים את 4 לשיטת ההסרה, האות באינדקס הרביעי שהיא "E" מוסרת מהרשימה. כאשר עוברים דרך הרשימה באמצעות לולאת for, האותיות A, B, C ו-D יודפסו.
מה זה LinkedList?
בדומה ל-ArrayList, ה-LinkedList משמש לאחסון רכיבי נתונים באופן דינמי. אובייקט שנוצר באמצעות מחלקה LinkedList רשאי לאחסן קבוצה של אלמנטים ברשימה. הקיבולת גדלה אוטומטית, כך שהמתכנת יכול להוסיף אלמנטים לרשימה. הוא משתמש באופן פנימי ברשימה מקושרת כפולה לאחסון נתונים. ברשימה מקושרת כפולה, הנתונים מאוחסנים כצמתים. כל צומת מכיל שני קישורים. הקישור הראשון מצביע על הצומת הקודם. הקישור הבא מצביע על הצומת הבא ברצף.
המחלקה LinkedList מרחיבה את המחלקה AbstractSequentialList ומיישמת את ממשק List. לכן, השיטות של ממשק רשימה יכולות לשמש את ה-LinkedList. ניתן להשתמש בשיטת get() כדי לגשת לאלמנטים של הרשימה. ניתן להשתמש בשיטת add() כדי להוסיף אלמנטים לרשימה. השיטה remove() משמשת להסרת אלמנט מהרשימה. עיין בתוכנית שלהלן.
איור 02: דוגמה עם LinkedList
לפי התוכנית לעיל, נוצר אובייקט של LinkedList. באמצעות שיטת ההוספה, ניתן להוסיף אלמנטים באופן דינמי. האלמנטים "A", "B", "C", "D" ו- "E" מתווספים בשיטת ההוספה. שיטת ההסרה משמשת להסרת אלמנט מהרשימה. כאשר מעבירים את 4 לשיטת ההסרה, האות באינדקס הרביעי שהיא "E" מוסרת מהרשימה. בעת איטרציה באמצעות לולאת for, האותיות A, B, C ו-D יודפסו.
מהם הדמיון בין ArrayList ל-LinkedList?
- גם ArrayList וגם LinkedList מיישמים ממשק List.
- גם ArrayList וגם LinkedList יכולים להכיל רכיבים כפולים.
- גם ArrayList וגם LinkedList שומרים על סדר ההכנסה.
מה ההבדל בין ArrayList ל-LinkedList?
ArrayList לעומת LinkedList |
|
ArrayList היא מחלקה שמרחיבה את ה- AbstractList ומיישמת את ממשק ה- List אשר משתמש באופן פנימי במערך דינמי לאחסון רכיבי נתונים. | LinkedList היא מחלקה שמרחיבה את AbstractSequentialList ומיישמת ממשקי List, Deque, Queue, אשר משתמשת באופן פנימי ברשימה מקושרת כפול לאחסון רכיבי נתונים. |
גישה לרכיבים | |
הגישה לרכיבים של ArrayList מהירה יותר מאשר ב-LinkedList. | הגישה לרכיבים של LinkedList איטית יותר מאשר של ArrayList. |
מניפולציה של אלמנטים | |
המניפולציה של רכיבים של ArrayList אטית יותר מאשר של LinkedList. | מניפולציה של רכיבים של LinkedList מהירה יותר מאשר של ArrayList. |
התנהגות | |
ArrayList מופיע בתור רשימה. | LinkedList מופיע בתור רשימה ותור. |
סיכום – ArrayList לעומת LinkedList
מסגרת האיסוף מאפשרת עבודה עם מבני נתונים כגון רשימות, עצים, מפות וסטים. הרשימה היא ממשק של מסגרת אוסף. מאמר זה דן בהבדל בין ArrayList ל-LinkedList. ArrayList היא מחלקה שמרחיבה את ה- AbstractList ומיישמת את ממשק ה- List שמשתמש באופן פנימי במערך דינמי לאחסון רכיבי נתונים. LinkedList היא מחלקה שמרחיבה את AbstractSequentialList ומיישמת ממשקי List, Deque, Queue, אשר משתמשת באופן פנימי ברשימה מקושרת כפול לאחסון רכיבי נתונים. זה ההבדל בין ArrayList ל-LinkedList.