דשדוש אוספים בג'אווה

1. סקירה כללית

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

2. דשדוש רשימה

נשתמש בשיטה java.util.Collections.shuffle , שלוקח כקלט א רשימה ומערבב אותו במקום. במקום זאת, אנו מתכוונים שהיא מדשדשת את אותה הרשימה שהועברה בקלט במקום ליצור אחת חדשה עם אלמנטים מעורבבים.

בואו נסתכל על דוגמה מהירה המראה כיצד לדשדש רשימה:

רשימת תלמידים = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); Collections.shuffle (סטודנטים);

יש גרסה שנייה של java.util.Collections.shuffle שמקבל גם כקלט מקור אקראי מותאם אישית. ניתן להשתמש בזה בכדי להפוך את הדשדוש לתהליך דטרמיניסטי אם יש לנו דרישה כזו ליישום שלנו.

בואו נשתמש בגרסה השנייה הזו כדי להשיג את אותה דשדוש בשתי רשימות:

רשימת סטודנטים_1 = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); רשימת סטודנטים_2 = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); int seedValue = 10; Collections.shuffle (students_1, אקראי חדש (seedValue)); Collections.shuffle (students_2, אקראי חדש (seedValue)); assertThat (students_1) .isEqualTo (students_2);

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

3. דשדוש אלמנטים של אוספים לא מסודרים

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

כמה יישומים, כגון LinkedHashMap, או א מַעֲרֶכֶת עם משווה - שמור על סדר קבוע, ולכן גם לא נוכל לדשדש אותם.

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

בואו נראה דוגמה מהירה לדשדוש אלמנטים של a מַפָּה:

מפה את studentsById = HashMap חדש (); studentsById.put (1, "Foo"); studentsById.put (2, "בר"); studentsById.put (3, "Baz"); studentsById.put (4, "Qux"); רשימה shuffledStudentEntries = ArrayList חדש (studentsById.entrySet ()); Collections.shuffle (shuffledStudentEntries); רשימה shuffledStudents = shuffledStudentEntries.stream () .map (Map.Entry :: getValue) .collect (Collectors.toList ());

באופן דומה, אנו יכולים לדשדש אלמנטים של a מַעֲרֶכֶת:

הגדר תלמידים = HashSet חדש (Arrays.asList ("Foo", "Bar", "Baz", "Qux")); רשימת studentList = ArrayList חדש (סטודנטים); Collections.shuffle (studentList);

4. מסקנה

במדריך מהיר זה ראינו כיצד להשתמש java.util.Collections.shuffle לדשדש אוספים שונים בג'אווה.

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

כרגיל, כל הקוד המוצג במאמר זה זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found