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

使用ArrayList的binarySearch集合

司寇书
2023-03-14
问题内容

对于这个愚蠢的问题,我感到抱歉,我一直在搜索如何在我的ArrayList中使用binarysearch,如下所示:

List<Integer> arrList = new ArrayList<Integer>();       
        arrList.add(3); 
        arrList.add(5); 
        arrList.add(7);
        arrList.add(2);

问题是当我使用时:

Collections.sort(arrList);
Collections.reverse(arrList);
int indeks = Collections.binarySearch(arrList, 7);

indeks的值始终为-5,我认为应该为2,因为在反转myArrList之后,输出看起来像这样:

[7, 5, 3, 2]

那么,在这里我该怎么做才能获得7的正确债款?提前致谢


问题答案:

Collections.binarySearch() 期望元素按升序排列:

sort(List)在进行此调用之前,必须根据列表元素的自然顺序将其按升序排序(例如通过方法)。如果未排序,则结果不确定。

如果要对降序列表进行二进制搜索,请使用Comparator.reverseOrder()

int indeks = Collections.binarySearch(arrList, 7, Comparator.reverseOrder());

indeks 现在为0,对应于列表的第一个元素。

请注意,您可以使用相同的比较器对列表进行降序排序,而不是先升序然后倒序:

Collections.sort(arrList, Comparator.reverseOrder());


 类似资料:
  • 下面我使用的代码工作正常,并输出名称,但排序方法不起作用。我需要“Collections.sort(nameFromText);”按名字的字母顺序对ArrayList排序。 我做错了什么?

  • 因此,我有实现comparable的类,但当我试图创建调用Collections.sort()的排序方法时,它给出了一个错误,说明我不能用ArrayList调用collection sort。有人能帮忙吗?并且帮助我使用compareTo方法,我仍然停留在如何比较ArrayList中的每个元素上

  • 问题内容: 我只是想使用本机Java binarySearch,希望它总是可以找到第一个匹配项。但是它并不总是返回第一次出现的错误,我在这里做错了什么? ======== ===================================== 更新资料 现在看来,API并没有保证!谁能给我一个有关如何找到给定元素的第一个出现和最后一个出现的工作示例(例如User(10,null)? 非常感谢。

  • 问题内容: 我可以帮忙吗?我已经尝试了许多方法来使它起作用,并对数组进行排序并打印,但是在此之后,我的二进制搜索功能就不想运行并给我正确的结果。它总是给我-1。有什么帮助吗? 问题答案: 您实际上并没有与数组值进行比较。在 而是使用本节 您找到索引是正确的,但是您所做的只是将索引号与密钥进行比较,这显然是不正确的。在编写时,您实际上将把您的密钥与index处的数字进行比较。 另外代码的最后一行给出

  • 问题内容: 在我正在使用的代码下面,可以正常工作并输出名称,但不能使用sort方法。我期望“ Collections.sort(nameFromText);” 按名字的字母顺序对ArrayList进行排序。 我究竟做错了什么? 问题答案: 方法期望要排序的列表元素具有可比性。元素类型应该实现接口,或者您应该使用带有通用实例的重载方法。 在下面的代码中,您不满足上述两个条件。您的类既没有实现,也没有

  • 一、概述 以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。 按数组下标访问元素—get(i)/set(i,e) 的性能很高,这是数组的基本优势。 直接在数组末尾加入元素—add(e)的性能也高,但如果按下标插入、删除元素—add(i,e), remov