בודק אם רשימה ממוינת בג'אווה

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

במדריך זה נראה דרכים שונות לבדוק אם רשימה ממוינת בג'אווה.

2. גישה איטרטיבית

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

ניתן למיין רשימה לפי הסדר הטבעי או לפי סדר מותאם אישית. אנו נסקור את שני המקרים הללו באמצעות ניתן להשוות ו משווה ממשקים.

2.1. באמצעות ניתן להשוות

ראשית, בוא נראה דוגמה לרשימה שהאלמנטים שלה הם מסוג ניתן להשוות. כאן נשקול רשימה המכילה אובייקטים מהסוג חוּט:

בוליאני סטטי ציבורי isSorted (List listOfStrings) {if (isEmpty (listOfStrings) || listOfStrings.size () == 1) {return true; } איטרטור איטר = listOfStrings.iterator (); מחרוזת הנוכחי, הקודם = iter.next (); ואילו (iter.hasNext ()) {current = iter.next (); if (previous.compareTo (current)> 0) {return false; } הקודם = הנוכחי; } להחזיר נכון; }

2.2. באמצעות משווה

עכשיו, בואו ניקח בחשבון עוֹבֵד בכיתה, שאינה מיישמת ניתן להשוות. לכן, במקרה זה, עלינו להשתמש ב- משווה להשוואה בין האלמנטים הסמוכים לרשימה:

בוליאני סטטי ציבורי isSorted (רשימת עובדים, עובד ComparatorComparator) {if (isEmpty (עובדים) || עובדים.גודל () == 1) {להחזיר נכון; } איטרטור איטר = עובדים. איטרטור (); הנוכחי של העובד, הקודם = iter.next (); ואילו (iter.hasNext ()) {current = iter.next (); אם (employeeComparator.compare (הקודם, הנוכחי)> 0) {return false; } הקודם = הנוכחי; } להחזיר נכון; }

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

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

3. גישה רקורסיבית

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

ציבור בוליאני סטטי ציבורי isSorted (List listOfStrings) {return isSorted (listOfStrings, listOfStrings.size ()); } בוליאני סטטי ציבורי isSorted (List listOfStrings, int index) {if (index 0) {return false; } אחר {return isSorted (listOfStrings, index - 1); }}

4. שימוש בגויאבה

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

4.1. גויאבה מזמין מעמד

בחלק זה נראה כיצד להשתמש ב- מזמין בכיתה בגויאבה כדי לבדוק רשימה ממוינת.

ראשית נראה דוגמה לרשימה המכילה אלמנטים מסוג ניתן להשוות:

בוליאני סטטי ציבורי isSorted (List listOfStrings) {return Ordering. טבעי (). isOrdered (listOfStrings); }

לאחר מכן, נראה כיצד נוכל לבדוק אם רשימה של עוֹבֵד אובייקטים ממוינים באמצעות משווה:

בוליאני סטטי ציבורי isSorted (רשימת עובדים, Comparator employeeComparator) {החזר Ordering.from (עובדComparator) .is הוזמן (עובדים); }

כמו כן, אנו יכולים להשתמש טבעי (). reverseOrder () כדי לבדוק אם רשימה ממוינת בסדר הפוך. בנוסף, אנו יכולים להשתמש טבעי (). nullFirst () ו טִבעִי().nullLast () כדי לבדוק אם ריק מופיע ברשימה הראשונה או האחרונה ברשימה הממוינת.

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

4.2. גויאבה משווים מעמד

אם אנו משתמשים ב- Java 8 ומעלה, Guava מספק חלופה טובה יותר מבחינת משווים מעמד. נראה דוגמה ל משתמש ב isInOrder שיטה של הכיתה הזו:

בוליאני סטטי ציבורי isSorted (List listOfStrings) {return Comparators.isInOrder (listOfStrings, Comparator. naturalOrder ()); }

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

5. מסקנה

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

ניתן למצוא את היישום של כל הדוגמאות וקטעי הקוד ב- GitHub.


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