Java 使用Arrays.binarySearch将字符串与对象进行比较

Java 使用Arrays.binarySearch将字符串与对象进行比较,java,string,types,compare,comparator,Java,String,Types,Compare,Comparator,我正在研究一个后缀数组的实现,用于加速短语搜索 我有一个“后缀”对象数组,这是后缀数组。每个后缀对象有两个值,文档和位置 我有一个比较器,它根据使用document和position两个值在字符串字典中的查找对这个数组进行排序。(例如,一个document=1、position=5的后缀对象指向“fish”,另一个对象指向“cake”。“cake”将排序在“fish”之前。这很好,后缀数组按预期的字母顺序排序 但是,现在我想在这个后缀数组中进行二进制搜索查找,这次的输入是一个字符串。我如何使用A

我正在研究一个后缀数组的实现,用于加速短语搜索

我有一个“后缀”对象数组,这是后缀数组。每个后缀对象有两个值,文档和位置

我有一个比较器,它根据使用document和position两个值在字符串字典中的查找对这个数组进行排序。(例如,一个document=1、position=5的后缀对象指向“fish”,另一个对象指向“cake”。“cake”将排序在“fish”之前。这很好,后缀数组按预期的字母顺序排序


但是,现在我想在这个后缀数组中进行二进制搜索查找,这次的输入是一个字符串。我如何使用Arrays.binarySearch()和我用来比较字符串键(我正在搜索的短语)的比较器来搜索后缀数组?如果binarySearch()方法会让我以某种方式在比较器中完成它…

不确定我是否完全理解,但以下是我的想法:

修改类中的
比较方法,如下所示:

class Suffix implements Comparable<Object>
{
   /* ... */

   int getDocumentId() { /* ... */ }
   int getPosition() { /* ... */ }

   @Override
   public int compareTo(Object o)
   {
      if (o.getClass() == String.class)
      {
         /* Derived from compare code comment */
         String key = dictionary.getDocument(getDocumentId()).getData();
         String suffix = (getPosition() == 0) ? key : key.substring(getPosition());

         suffix.compareTo((String)o);
      }
      else
      {
         /* same as original comparison */
      }
   }
}
Arrays.binarySearch(yourArray, yourString);

你能为你想要完成的事情提供代码示例吗?你忘了标题中的“后缀树”了吗?@moose:不,戴帽子的人是“海森堡”我不知道KIT是什么,也没有在任何地方发布关于这个问题的任何信息。@ponycat:啊,我不知道这是一个广泛传播的图像。KIT是卡尔斯鲁厄理工学院,一所大学。我们三天后在这里有一个考试,你必须知道如何创建后缀树/数组,所以我想你可能也是这里的学生。问题是它指向的字符串没有保存在我的对象中。有一个单独的“存储”我使用ints文档和位置访问,并从该存储中导出字符串。非常感谢您的时间和帮助!虽然您的解决方案与我的实现不太匹配(主要是因为我对实际问题的糟糕解释)它为我指明了另一个解决方案的正确方向。再次感谢!