我有下面的例子,我想知道是否有办法在不运行代码和试错的情况下,通过查看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
你可以阅读Javadoc的 Comparable
's compareTo
并发现它返回。
一个负整数,0,或者一个正整数,因为这个对象小于,等于,或者大于指定对象。
在你的例子中,如果这个对象的年份比另一个对象的年份小,你就返回一个负值(-1),如果年份相等,就返回0,如果这个对象的年份比另一个对象的年份大,就返回一个正值(1)。
因此,一个 Movie
被认为 "低于 "另一个 Movie
如果它有一个较小值的 year
财产。
因此,你的 compareTo
将对 Movie
按年限递增的顺序排列,自 Collections.sort(List<T> list)
:
根据元素的可比较自然排序,将指定的清单按升序排列。