假设我有一个包含以下实例变量的 Movie 类:
private String myTitle; // title of Bond film
private String myBondActor; // name of actor who portrayed James Bond
private int myYear; // year film was released
private double myFilmRating;// from all-reviews.com
private int myLengthHours; // hours (truncated) portion of film length
private int myLengthMinutes;// minutes beyond truncated hours
我有一个 Movie
对象的 ArrayList
,我使用冒泡排序算法对 ArrayList
进行排序:
public void bubbleSort(ArrayList<Movie> list) {
for (int outer = 0; outer < list.size() - 1; outer++) {
for (int inner = 0; inner < list.size() - outer - 1; inner++) {
if (list.get(inner).compareTo(list.get(inner + 1)) > 0) {
Movie temp = list.get(inner);
list.set(inner, list.get(inner + 1));
list.set(inner + 1, temp);
}
}
}
ArrayList 是如何排序的?
最佳答案
看看当你执行 int x= 5,y=10 时,我们现在可以像 x<y, we can compare two variables, but how do we compare two objects ??
一样比较它们
我们通过compareTo()来比较对象,您的Movie类必须实现Comparable接口(interface)才能将其对象相互比较。
您必须提供compareTo()方法的实现,此标准将决定哪个对象大于另一个对象。
例如,假设一部电影应该根据电影的 int myYear(发行年份)进行排序(比较),因此实现将是
public int compareTo(Movie other)
{
return this.myYear - other.getMyYear();
}
现在我们创建两个 Movie 类型的对象 m1 和 m2,其中 m1.myYear=2000 和 m2.myYear=2001
当我们这样做时m1.compareTo(m2);
- 我们得到 2000 - 2001 = -1...负数,表示 m1 < m2。
- 如果我们得到一个正数,则 m1 > m2
- 如果我们得到零,则 m1 ==m2
这里我根据 myYear 决定哪个 Movie 对象比另一个更大,您可以决定其他可能更多的条件。 无论条件是什么,请记住您返回的数字 +ve 、 -ve 或 0(零)将决定哪个对象大于另一个对象。
关于java - Comparable类的compareTo方法如何对对象起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22607390/