java - 对象数组的二分查找

标签 java binary-search compareto

我得到了一些包含 Person 对象数组的代码,我要编写方法来执行二分搜索并重写 Person 类中的 Compareto 方法,以根据姓氏和名字进行比较。

public static int binarySearch( Person[] persons, Person key )
   {
      int low = 0;
      int high = persons.length - 1;

      return binarySearch(persons, key, low, high);
   }

   private static int binarySearch( Person[]persons, Person key, int low, int high )
   {
          if(low > high)        //The list has been exhausted without a match.
              return -low - 1;

          int mid = (low + high) / 2;
          if (persons[mid] == key)
              return mid;
          if(persons[mid] < key) //!!**'The < operator is undefined for the type'
              return binarySearch(persons, key, low, mid-1);
          else 
              return binarySearch(persons, key, 0, persons.length -1);
       }

我想大部分二分查找代码都是我写的。但是,我遇到的问题是在 if(persons[mid] < key) 处,我收到错误“< 运算符对于该类型未定义”。

我认为它可能需要用我的compareTo方法做一些事情,但我似乎无法修复它

这里是compareTo供引用

public int compareTo( Object o )
   {
      Person p = (Person) o;
      int d = getLastName().compareTo(p.getLastName());
      if (d == 0)
          d = getFirstName().compareTo(p.getFirstName());
      return d;
   }

感谢您的帮助!

最佳答案

而不是

if(persons[mid] < key) 

使用

if(persons[mid].compareTo(key) < 0) 

关于java - 对象数组的二分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19411371/

相关文章:

java - CompareTo 函数问题

java - 如何获取给定作业名称和组名称的 cron 表达式?

java - 在 Java 中,如何确定多个值之一是否位于数组中?

java - 实现自定义 compareTo

c++ - 如何二进制搜索结构 vector 并插入适当的索引

c - 在 C 中将整数分类/映射到各种类别的优雅方法是什么?

java - 我的类没有重写抽象方法compareTo

java - 在运行时移除 FLAG_TRANSLUCENT_STATUS

java - 给物体补水是什么意思?

java - 使用 Math.Commons 库的牛顿-拉夫森方法