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

我有下面的示例,我想知道是否有一种方法可以仅通过查看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
jhk911 回答:如何在不实际运行代码的情况下知道实现Comparable <>的类的排序顺序?

您可以阅读Comparable的{​​{1}}的Javadoc并发现它返回:

此对象小于,等于或大于指定对象时为负整数,零或正整数。

在您的情况下,如果此对象的年份小于另一个对象的年份,则返回负值(-1);如果年份相等,则返回0;如果此对象的年份更大,则返回正值(1)比其他对象的

因此,如果一个compareTo的{​​{1}}属性值较小,则认为它“小于”另一个Movie

因此,自Movie起,您的year将按照年份的升序对compareTo进行排序:

根据指定元素的可比自然顺序将指定列表升序排列。

本文链接:https://www.f2er.com/2772569.html

大家都在问