JavaRush /จาวาบล็อก /Random-TH /การใช้ 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จะถูกจัดเรียงจากน้อยไปมาก (จากน้อยไปหามาก) ผู้เขียนวิธีแก้ปัญหาคือ Ethan Arrowood
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION