ArrayList ו-LinkedList מיישמים את ממשק List ושומרים על סדר ההכנסה. שניהם מחלקות לא מסונכרנות.
פורמט מחרוזת java ארוך
עם זאת, ישנם הבדלים רבים בין המחלקות ArrayList ו-LinkedList המפורטות להלן.
רשימת מערך | רשימה מקושרת |
---|---|
1) ArrayList משתמש באופן פנימי ב- a מערך דינמי לאחסן את האלמנטים. | LinkedList משתמש באופן פנימי ב- a רשימה מקושרת כפולה לאחסן את האלמנטים. |
2) מניפולציה עם ArrayList היא לְהַאֵט מכיוון שהוא משתמש במערך פנימי. אם אלמנט כלשהו מוסר מהמערך, כל שאר האלמנטים מוזזים בזיכרון. | מניפולציה עם LinkedList היא מהיר יותר מאשר ArrayList מכיוון שהוא משתמש ברשימה מקושרת כפולה, כך שלא נדרשת הסטת סיביות בזיכרון. |
3) מחלקה ArrayList יכולה לפעול כרשימה רק בגלל שהוא מיישם רשימה בלבד. | כיתת LinkedList יכולה לפעול כרשימה ותור גם בגלל שהוא מיישם ממשקי List ו-Deque. |
4) ArrayList הוא טוב יותר לאחסון ולגישה נתונים. | LinkedList הוא טוב יותר למניפולציה נתונים. |
5) מיקום הזיכרון עבור הרכיבים של ArrayList הוא רציף. | המיקום של הרכיבים של רשימה מקושרת אינו מדבק. |
6) בדרך כלל, כאשר ArrayList מאותחל, קיבולת ברירת מחדל של 10 מוקצית ל-ArrayList. | אין מקרה של קיבולת ברירת מחדל ב-LinkedList. ב-LinkedList נוצרת רשימה ריקה כאשר אתחול LinkedList. |
7) ליתר דיוק, ArrayList הוא מערך שניתן לשנות את גודלו. | LinkedList מיישמת את הרשימה המקושרת הכפולה של ממשק הרשימה. |
דוגמה של ArrayList ו-LinkedList ב-Java
בואו נראה דוגמה פשוטה שבה אנו משתמשים ב-ArrayList וב-LinkedList שניהם.
שם קובץ: TestArrayLinked.java
import java.util.*; class TestArrayLinked{ public static void main(String args[]){ List al=new ArrayList();//creating arraylist al.add('Ravi');//adding object in arraylist al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); List al2=new LinkedList();//creating linkedlist al2.add('James');//adding object in linkedlist al2.add('Serena'); al2.add('Swati'); al2.add('Junaid'); System.out.println('arraylist: '+al); System.out.println('linkedlist: '+al2); } }בדוק את זה עכשיו
תְפוּקָה:
arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid]
נקודות לזכור
להלן כמה נקודות חשובות שכדאי לזכור לגבי ArrayList ו-LinkedList.
- כאשר קצב ההוספה או ההסרה גבוה מתרחישי הקריאה, לכו על ה-LinkedList. מצד שני, כאשר תדירות תרחישי הקריאה היא יותר מקצב ההוספה או ההסרה, אז ArrayList מקבל עדיפות על LinkedList.
- מכיוון שהרכיבים של ArrayList מאוחסנים יותר קומפקטיים בהשוואה ל-LinkedList; לכן, ArrayList ידידותית יותר למטמון בהשוואה ל-LinkedList. לפיכך, הסיכויים להחמצת המטמון הם פחותים ב-ArrayList בהשוואה ל-LinkedList. בדרך כלל, זה נחשב ש-LinkedList דל במטמון-locality.
- תקרת הזיכרון ב-LinkedList היא יותר בהשוואה ל-ArrayList. הסיבה לכך היא שב-LinkedList יש לנו שני קישורים נוספים (הבא והקודם) מכיוון שהוא נדרש לאחסן את הכתובת של הצמתים הקודמים והבאים, והקישורים הללו צורכים מקום נוסף. קישורים כאלה אינם קיימים ב-ArrayList.