java - 与 ArrayList 的合并排序

标签 java sorting arraylist merge compiler-errors

我正在尝试以 ArrayList 作为参数实现合并排序算法。据我所知,除了合并方法中的 if 语句之外,代码工作正常。我收到错误:二元运算符“<=”的操作数类型错误。我确信这是因为我有两种不兼容的类型正在比较,但我似乎在弄清楚这一点时碰壁了。尽管如此,作为一个学习的学生,任何正确方向的指导或指导都会非常有帮助。

我现在可以按姓氏正确排序了。现在我想知道我需要更改什么才能按名字甚至 ID 号排序。如果我能得到一些关于如何解决这个问题的指导,我将不胜感激。

private static void sortListByID (List<Person> theList) {
   if (theList.size() >= 2) {
      List<Person> left  = new ArrayList<>();
      left.addAll(theList.subList(0, theList.size()/2));
      List<Person> right = new ArrayList<>();
      right.addAll(theList.subList(theList.size()/2, theList.size()));

      sortListByID(left);
      sortListByID(right);
      merge(theList, left, right);
   }
}
private static void merge(List<Person> result, List<Person> left, 
      List<Person> right) {
   int i1 = 0;
   int i2 = 0;

   for (int i = 0; i < result.size(); i++) {
      if (i2 >= right.size() || (i1 < left.size() && 
            left.get(i1).compareTo(right.get(i2)) < 0)) {
         result.set(i, left.get(i1));
         i1++;
      } else {
        result.set(i, right.get(i2));
        i2++;
      }
   }
}

最佳答案

您可能应该使用compareTo而不是<=不能与 Person 一起使用对象

left.get(i1) <= right.get(i2)

变成了

left.get(i1).compareTo(right.get(i2)) < 0

确保Person实现Comparable该方法工作的接口(interface)

关于java - 与 ArrayList 的合并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50203778/

相关文章:

java - spring:如何定义属性文件位置优先级?

java - 如何创建 Activity 的 Android 快捷方式?

ios - 按键排序基于 NSDictionary 的 UITableView

C# Datagrid(不是datagridview): how to sort a column of numbers since all values are stored as Text?

java - 检查 hasPrevious 的元素

java - 查找A hashmap整数值是否包含(value >= 25)

java - 在逗号Java之后热将小数舍入到下一个5的乘法

sorting - 如何在symfony2中对实体的arrayCollection进行排序

java - 将 double 组转换为 double ArrayList

java - 如何通过属性使用流来过滤对象?