java - Comparable类的compareTo方法如何对对象起作用

标签 java sorting arraylist comparable

假设我有一个包含以下实例变量的 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/

相关文章:

c - 为什么给qsort()的比较函数需要返回三个不同的值呢?

java - JBoss 6 中的异步处理 ("Comet")

java - 按字典顺序对点数组进行排序

java - 在 Java 中以较小的磁盘大小写入 PNG 文件

Linux CSV 根据大文件中的旧日期删除重复项(超过 100k 记录)

c# - 在 c# 中根据其子元素对 arraylist 进行排序

java - 我试图让用户将数字输入到 ArrayList 中。如果用户输入 0,则对数字求和并平均

java - 从抽象产品列表中提取具体产品的子列表

java - Android升级应用程序版本时资源会发生什么变化

Java 垃圾回收问题