JavaRush /مدونة جافا /Random-AR /استخدام 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