java - 'compareTo' 比较用例
问题描述
package Comparable;
public class Movie implements Comparable<Movie> {
private double rating;
private String name;
private int year;
@Override
public int compareTo(Movie m) {
// TODO Auto-generated method stub
return this.year - m.year;
}
public Movie(double rating, String name, int year) {
this.rating = rating;
this.name = name;
this.year = year;
}
}
主要课程:
package Comparable;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Movie> list = new ArrayList<Movie>();
list.add(new Movie(8.8, "Force Awakens", 2015));
list.add(new Movie(7.7, "Star Wars", 1977));
list.add(new Movie(9.9, "Empire Strikes back", 1980));
list.add(new Movie(3.2, "Return of the jedi", 1983));
// Sort the items based on the pararmeter mentioned in the compareTo method
// .Here the sort pareameter is the year of the release.
Collections.sort(list);
System.out.println("Movie after sorting :"+"\n");
for (Movie movie : list) {
System.out.println(movie.getName() + " " + movie.getRating() + " " + movie.getYear());
}
}
}
我有上面的用例compareTo
。我想了解该compareTo
方法在幕后做了什么。当我覆盖该compareTo
方法并决定按“年份”排序时;比较是如何发生的?我可以理解它返回1
,-1
并且0
根据比较的结果。但是在下面的代码行中比较是如何发生的:
return this.year - m.year;
当我说this.year
时,代码是否采用第一项,即
8.8, "Force Awakens", 2015
并比较列表的所有元素,即movie
传递给compareTo
上述方法的对象元素?
对象比较是如何发生的?
解决方案
这是方法的文档Collections.sort(..)
,这就是它所说的:
根据其元素的自然顺序,将指定列表按升序排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素必须相互可比较(即,e1.compareTo(e2) 不得为列表中的任何元素 e1 和 e2 抛出 ClassCastException)。
这就是排序的完成方式:
这个实现将指定的列表转储到一个数组中,对数组进行排序,并遍历列表,从数组中的相应位置重置每个元素。这避免了由于尝试对链表进行排序而导致的 n2 log(n) 性能。
所以是的,所以你是对的。它从列表中提取每个元素,并使用 将其与其他元素进行比较compareTo
。
推荐阅读
- javascript - 在初始化新日历之前单击引导选项卡上的销毁全日历
- reactjs - 如何使用 React JS 创建 UML 类图
- javascript - 多 API 调用
- python - Python-yaml:yaml.reader.ReaderError:不可接受的字符
- html - 如何使用 css 使文本闪烁和发光
- powershell - 如何将字符串和数组的混合传递给 PowerShell 中的可执行文件?
- php - 使用复选框发送时发送空白消息
- mandrill - Mandrill“将每封电子邮件的副本发送到此地址”:抄送还是密送?
- php - 重复的 URL 发布参数问题
- google-analytics - 谷歌分析目标转化范围