ArrayList vs Linked List

Zeliran

New member
ArrayList vs Linked List

במה יותר כדאי להשתמש? arrayList, שכבר כל הפונקציות מוכנות והוא נוח לשימוש, או לכתוב מחלקה חדשה רק בשביל הרשימה המקושרת.. מה ההבדלים ביניהם בכלל?
 
אתה מדבר על Java?

אם כן (ובעצם בכל מקרה) אין "הכי טוב" -- יש הכי מתאים לצרכים שלך. למשל -- ב java גם ArrayList, גם Vector וגם LinkedList הם List, אבל לכל אחד מימוש שונה שמתאים לצרכים שונים. אם אתה צריך לחפש הרבה איברים באמצע הרשימה להשתמש ב LinkedList זה מיותר לחלוטין, כי במימוש יש reference ישיר רק לאיבר הראשון. אם אתה לא צריך סינכרון באוביקט זה מיותר להשתמש ב Vector כי הוא מסונכרן בתוכו, אז קח את ArrayList. יש ויש.
 

voguemaster

New member
סינכרון ??

אני אישית לא ממש מבין את ההבדלים בין Vector ל-Array בג'אווה
למה הכוונה בסינכרון ? אתה מדבר על threads או משהו אחר ? כי אתה יודע, יש תמיד synchronized
 
כן, סינכרון מלשון synchronized ../images/Emo13.gif

מה ההבדל בין Vector ל Array? (אולי אתה מתכוון בין Vector ל ArrayList.9 למשל ש array מכיל סוג מסוים של אוביקט, ולא Object (מה שכנראה ישתנה מבחינת ה Vector בעזרת Generics שיגיע מתישהו), שמערך הוא בגודל קבוע, שלהעתיק מערך למערך אחר אפשר בצורה יעילה מאד בעזרת System, ש Vector הוא דינמי (ואולי משתמש בפנים במערכ(ים), אני לא זוכר), אבל משלמים מחיר על הדינמיות הזאת. ל synchronized יש מחיר של ביצועים. כשלא צריך שמבנה מסוים יהיה מסונכרן בין threadים, עדיף להימנע מזה. אפשר לגרום גם ל ArrayList להיות מסונכרן ע"י יצירה שלו דרך מתודה סטטית ב Collections, לא זוכר את השם כרגע.
 

voguemaster

New member
אוקיי

תראה, אני לא בא לזלזל ב-generics וגם בטח לא ב-templates של ++C אבל בוא נודה בזה - כשיש לך אובייקט אב שכולם יורשים ממנו (ואתה יודע שיש
) אז כל container יכול להכיל כל סוג של אובייקט ובזה נגמר העניין. כדי להבטיח type safety כל מה שאתה צריך לעשות בעיקרון זה לרשת מ-Vector או Array ולבדוק את הטיפוס שמועבר לך, והנה הבטחת גם את הדבר השני: container שמסוגל לאחסן סוג אחד של אובייקט. אבל עזוב, זה פיתרון עקום. עדיף פשוט להשתמש ב-containers כמו שהם ובזה נגמר העניין. תאמין או לא, לא כל המפתחים בעולם חושבים ש-generics ו-templates זה כזה רעיון חזק. יש כאלה שמסתדרים היטב עם מה שיש וזה פשוט באותה מידה. (וזה לא כמו להגיד שאפשר ליישם templates עם *void ב- ++C)
 
אי הבנה

אני עדיין תוהה אם כשאתה אומר Array אתה מתכוון ל ArrayList או למערך (כלומר []). אם אתה מתכוון ל ArrayList, אז זה אותו דבר כמו Vector, רק שהמטודות לא מוגדרות כ synchronized. אמרתי שאי אפשר לפתור את זה? בטח שאפשר. הקונספט של templates (ומכאן generics) הוא נחמד, וגם אני חושב שאפשר לחיות בלעדיו (לפחות ב java, אני לא מתיימר להיות מתכנת ++C), ואני מסתדר בלי זה מצוין. מה הכוונה "containers"? סתם אוביקטים שאתה יוצר לעצמך? זה כבר לא משנה אם ככה או לרשת ממשהו קיים, לפי הצורך/רצון אני מניח.
 
למעלה