JavaRush /בלוג Java /Random-HE /שימוש ב-Java Arrays.sort() בכל רשימה של אובייקטים

שימוש ב-Java Arrays.sort() בכל רשימה של אובייקטים

פורסם בקבוצה
המיון יכול להיות מסובך, במיוחד אם הרשימה שלך Listמכילה עטיפות אובייקטים ( Byte, Integer, Short, Long, Double, Float) ולא סוגי נתונים מספריים פרימיטיביים. אני מציע להשתמש בשיטה שיכולה להיות שימושית מאוד לפתרון בעיות פשוטות או מענה לשאלת מראיין. שימוש ב-Java Arrays.sort() בכל רשימה של אובייקטים - 1ראשית, בואו נבחר מה נמלא שלנו List. בדוגמה זו אשתמש ברשימה של קצוות גרפים ( Edges) ממבנה נתונים פשוט Graph:
// Очень простой класс Edge (рёбро графа)
public class Edge {
    public Vertex src;
    public Vertex dst;
    public double cost;

    // создание ребра между двух вершин
    Edge(Vertex s, Vertex d, double c) {
        src = s;
        dst = d;
        cost = c;
    }
}
// Список рёбер
Edge[] edges = graph.getEdges();

מהו גרף?

במתמטיקה בדידה, גרף מוגדר כזוג קבוצות ( V, E), כאשר Vהיא תת-קבוצה של קבוצה שרירותית הניתנת לספירה, והיא Eתת-קבוצה ( VхV).

כנראה, למי שלא רגיל להפשטות מתמטיות, הגדרה כזו לא תהיה ברורה במיוחד, אז בוא נגיד את זה בצורה פשוטה יותר:

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

הקודקודים של גרף כזה הם תחנות . ובכן, השבילים ביניהם הם קצוות .

לאחר מכן אנו מגדירים את יישום הממשק java.util.Comparator:
class SortByCost implements Comparator<Edge> {
    public int compare(Edge a, Edge b) {
        if ( a.cost < b.cost ) return -1;
        else if ( a.cost == b.cost ) return 0;
        else return 1;
    }
}
בדוגמה זו, נמיין את קצוות הגרף לפי משקלם, או לפי המרחק מהקודקוד src (מקור) לקודקוד dst (יעד). לבסוף, אנו משתמשים בשיטה הסטנדרטית java.util.Arrays.sort ():
Arrays.sort(edges, new SortByCost())
כעת הגיליון שלנו המלא בחפצים Edgesממוין בסדר עולה (מהקטן לגדול ביותר). מחבר הפתרון הוא איתן ארוווד.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION