JavaRush /Java блогу /Random-KY /Java Arrays.sort() объекттеринин каалаган тизмесинде колд...

Java Arrays.sort() объекттеринин каалаган тизмесинде колдонуу

Группада жарыяланган
Сорттоо татаал болушу мүмкүн, өзгөчө, эгер сиздин тизмеңизде баштапкы сандык берorштердин түрлөрүнө караганда ( , , , , , ) Listan objectтер камтылса . Мен жөнөкөй маселелерди чечүү же интервьючунун суроосуна жооп берүү үчүн абдан пайдалуу боло турган ыкманы колдонууну сунуштайм. Биринчиден, биз эмнени толтураарыбызды тандап алалы . Бул мисалда мен жөнөкөй маалымат түзүмүндөгү графиктин четтеринин () тизмесин колдоном : ByteIntegerShortLongDoubleFloatОбъекттердин каалаган тизмесинде Java Arrays.sort() колдонуу - 1ListEdgesGraph
// Очень простой класс 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())
Эми an objectтер менен толтурулган баракчабыз Edgesөсүү тартибинде (кичинеден чоңго чейин) иреттелген. Чечимдин автору Этан Арровуд.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION