【问题标题】:from array.sort() to compareTo()从 array.sort() 到 compareTo()
【发布时间】:2016-04-22 04:37:59
【问题描述】:

我觉得我在另一个帖子中的问题不够清楚,所以我用这个来缩小我想问的范围。

假设我正在尝试按作者姓名对包含两条推文的数组进行排序:

   public class Tweet implements Comparable {
   private String mName;

  public Tweet(String name) {
   mName = name;
   }

     public int compareTo(Object obj) {
        Tweet tempArrays = [Tweet] arrays;
         return mName.compareTo(tempArrays.mName);
   }

    }

然后覆盖 compareTo() 然后

  Tweet new tweetOne = tweet("Andy")
  Tweet new tweetTwo = tweet("Bob")
  Array[] arrays = {tweetOne, tweetTwo}
  Array.sort(arrays);

最后一行是否大致翻译为:

    return "Andy".compareTo("Bob");

感谢您迄今为止的帮助。

【问题讨论】:

  • 这是输入错误public class implements Comparable Tweet 吗?因为它应该像public class Tweet implements Comparable

标签: java sorting collections comparable compareto


【解决方案1】:

你的班级应该是这样的

  public class Tweet implements Comparable {
   private String mName;

  public Tweet(String name) {
     mName = name;
   }

   public int compareTo(Object obj) {
    Tweet tempTweet = (Tweet) obj;
     return mName.compareTo(tempTweet.mName);
   }
 }

然后您可以像这样对数组进行排序:

Tweet[] tweets = new Tweet[]{ Tweet("Andy"),Tweet("Bob")};

Arrays.sort(tweets);

希望对你有帮助

【讨论】:

  • 我试图理解重写 compareTo() 方法的工作原理,而不是手动排序推文:|
  • 当您调用 Arrays.sort 时,它会根据可比较的实现来比较对象,因此控制权转到 compareTo 方法并且它可以工作
  • @kshatriiya:这是OpenJDK source code for Arrays。从 sort(Object[], int, int, Comparator) 方法开始,继续到 mergeSort(Object[], Object[], int, int, int, Comparator) 方法,并继续遵循代码,直到你对 Java 开发人员正确实现排序感到满意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
相关资源
最近更新 更多