如何在不实际运行代码的情况下知道实现Comparable<> 的类的排序顺序?

问题描述 投票:4回答:1

我有下面的例子,我想知道是否有办法在不运行代码和试错的情况下,通过查看compareTo()方法就能知道电影array的排序顺序,升序或降序。

电影类。

 package com.company;

public class Movie implements Comparable<Movie>  {
    private double rating;
    private String name;
    private int year;

    // Used to sort movies by year
    public int compareTo(Movie m)
    {
        if (this.year == m.year) {
            return 0;
        }

        else if (this.year > m.year) {
            return 1;
        }

        return -1;

    }

    // Constructor
    public Movie(String nm, double rt, int yr)
    {
        this.name = nm;
        this.rating = rt;
        this.year = yr;
    }


}

The main class:

package com.company;

import java.util.*;

public class Main {

    public static void main(String[] args) {
        ArrayList<Movie> list = new ArrayList<Movie>();
        list.add(new Movie("Force Awakens", 8.3, 2015));
        list.add(new Movie("Star Wars", 8.7, 1977));
        list.add(new Movie("Empire Strikes Back", 8.8, 1980));
        list.add(new Movie("Return of the Jedi", 8.4, 1983));

        Collections.sort(list);

        System.out.println("Movies after sorting : ");
        for (Movie movie: list)
        {
            System.out.println(movie.getName() + " " +
                    movie.getRating() + " " +
                    movie.getYear());
        }
    }
}

结果:

Movies after sorting : 
Star Wars 8.7 1977
Empire Strikes Back 8.8 1980
Return of the Jedi 8.4 1983
Force Awakens 8.3 2015
java comparable
1个回答
3
投票

你可以阅读Javadoc的 Comparable's compareTo 并发现它返回。

一个负整数,0,或者一个正整数,因为这个对象小于,等于,或者大于指定对象。

在你的例子中,如果这个对象的年份比另一个对象的年份小,你就返回一个负值(-1),如果年份相等,就返回0,如果这个对象的年份比另一个对象的年份大,就返回一个正值(1)。

因此,一个 Movie 被认为 "低于 "另一个 Movie 如果它有一个较小值的 year 财产。

因此,你的 compareTo 将对 Movie按年限递增的顺序排列,自 Collections.sort(List<T> list):

根据元素的可比较自然排序,将指定的清单按升序排列。

© www.soinside.com 2019 - 2024. All rights reserved.