当前位置: 首页 > 面试题库 >

Collections.binarySearch如何工作?

慕阳
2023-03-14
问题内容

我试图了解Collections.binarySearch如何在Java中工作。我不太明白我得到的输出。

public static void main(String args[]) {
      // create arraylist       
      ArrayList<String>  arlst=new ArrayList<String> ();


      arlst.add("A");
      arlst.add("D");
      arlst.add("C");
      arlst.add("B");
      arlst.add("E");

      int index=Collections.binarySearch(arlst, "D", Collections.reverseOrder());

      System.out.println(index);


   }    
}

此代码的输出为-1。

当按此顺序插入元素时

      arlst.add("D");
      arlst.add("E");
      arlst.add("C");
      arlst.add("B");
      arlst.add("A");

结果是0。我认为如果找不到该元素,则结果为负数。有人可以澄清我收到的输出吗?


问题答案:

您的数据必须根据给定的比较器进行排序,以使二进制搜索能够按预期工作。(如果不是,则行为是不确定的。)

sort(List, Comparator)在进行此调用之前,必须根据指定的比较器(通过方法)将列表按升序排序。

如果确实对数据进行了排序,则该方法将返回文档中(-(insertion point) - 1)所指定元素(如果找到)的索引(如果找到)。

例:

// Make sure it's sorted
Collections.sort(arlst, Collections.reverseOrder());

int index=Collections.binarySearch(arlst, "D", Collections.reverseOrder());

System.out.println(index);  // prints 1


 类似资料:
  • 因此,如果我不能重写字符串作为它的最终结果(因此阻止我重写它的compareTo()方法来调用compareToIgnoreCase()),那么还有其他方法可以实现吗? 任何帮助都是非常感谢的。

  • 问题内容: 我正在使用binarySearch()方法在列表中查找元素的位置。而且我不明白为什么索引是-6。我看到该元素按降序排序后位于位置1。有人可以告诉我为什么看到职位-6吗?谢谢! 输出为:[100,50,30,10,2] 发现于索引-6 问题答案: 该列表必须按自然升序排列,否则结果将不可预测。 从Javadoc 使用二进制搜索算法在指定列表中搜索指定对象。 在进行此调用之前,必须根据列表

  • 我已经尝试了相关问题的所有答案,如下所示: 我为此使用以下代码: 这里是具有的变量,我希望在ArrayList中搜索该变量。 为此,我得到以下错误: 编辑: 很抱歉之前没有发布这个,排序不是一个问题。我事先已经对数组列表进行了相应的排序。

  • 问题内容: 我对如何使用动作监听器和实现它们有一个想法,但是我想知道是否有人可以告诉我他们如何监听事件?有某种轮询机制吗? 问题答案: 动作侦听器使用观察者模式注册事件,主事件循环会将它们注册的所有事件通知它们。所以不,这不是轮询(拉)机制,而是相反的(推)回调。这是“不给我们打电话,我们给您打电话”编程的一个例子。因为代码中的所有内容都在单个线程(事件循环)上运行,所以您不必担心不同事件之间的同

  • 问题内容: 我正在尝试了解linux syscallsched_setaffinity()的工作方式。这是我在这里提出的问题的后续。 我有本指南,该指南说明了如何使用syscall并有一个非常简洁(工作!)的示例。 因此,我下载了Linux 2.6.27.19 内核源代码。 我对包含该系统调用的行进行了“ grep”操作,得到了91个结果。没有希望。 最终,我试图了解内核如何 为特定内核 (或处理