gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:10:06 25 4
gpt4 key购买 nike

我有以下示例,我想知道是否有一种方法可以通过查看 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

最佳答案

您可以阅读 Comparable 的 Javadoc的 compareTo并发现它返回:

a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.



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

因此一个 Movie被认为“小于”另一个 Movie如果它具有较小的 year 值属性(property)。

因此您的 compareTo将对 Movie 进行排序s 按年份升序排列,自 Collections.sort(List<T> list) :

Sorts the specified list into ascending order, according to the Comparable natural ordering of its elements.

关于java - 如何在不实际运行代码的情况下知道实现 Comparable<> 的类的排序顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59731551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com