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

4

我有以下示例,我想知道是否有一种方法可以通过查看compareTo()方法而不运行代码和尝试错误,就能够判断电影数组被排序的顺序(升序或降序)。

电影类:

 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;
    }


}

主要类:
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

1
按升序排列...仅考虑年份进行排序。 - deHaar
1个回答

3
您可以阅读ComparablecompareTo文档,发现它返回:
作为该对象小于、等于或大于指定对象的负整数、零或正整数。
在您的情况下,如果此对象的年份小于其他对象,则返回负值(-1),如果年份相等,则返回0,如果此对象的年份大于其他对象,则返回正值(1)。
因此,如果一个Movieyear属性值较小,则被认为是另一个Movie的“小于”。
因此,您的compareTo将按照年份升序排序Movie,因为Collections.sort(List<T> list)
根据其元素的Comparable自然顺序,将指定的列表排序为升序。

因此,如果一部电影的年份属性值较小,则被认为比另一部电影“更少”。你能详细解释一下吗? - Fabian Andiel
@FabianAndiel 我在引用Javadoc中的一句话 - a negative integer... as this object is less than...the specified object. - 你想让我详细说明什么? - Eran
@FabianAndiel 先不要想电影,想一下数字。如果一个数字比另一个数字小,例如在x轴上,你会把它放得更靠左。现在回到电影和列表:如果认为一个电影“比另一个电影差”,那么它将被放置在列表的前面。 - geisterfurz007

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接