【问题标题】:How to use Collections.binarySearch for ArrayList<List<String>> arr in java如何在 java 中使用 Collections.binarySearch 来处理 ArrayList<List<String>> 数组
【发布时间】:2021-11-19 06:11:14
【问题描述】:

我有一个ArrayList&lt;List&lt;String&gt;&gt;,我试图在集合中使用内置的二进制搜索,但我总是遇到错误

int index = Collections.binarySearch(arraylistdata, id);

其中 arraylistdata 是我的 ArrayListList&lt;String&gt;

【问题讨论】:

  • 请向我们展示您的代码,无法理解 id 的类型或 arraylistdata 的类型
  • 所以你的arraylistdata声明是List&lt;List&lt;String&gt;&gt; arraylistdata?集合不支持,您可能已经提供了自己的比较器
  • 看看这个链接javatpoint.com/java-collections-binarysearch-method中的示例#5
  • 主要问题:List 没有实现Comparable。潜在的其他问题:binarySearch 仅适用于 排序 集合。

标签: java string arraylist binary-search


【解决方案1】:
public class CollectionsTest {
    
    @Test
    void test() {
        List<String> list = List.of("a", "b", "c");
        int index = Collections.binarySearch(list, "b");
        Assertions.assertEquals(1, index);
    }
}

这很好用,但您需要知道Collections#binarySearch 接受List&lt;? extends Comparable&lt;? super T&gt;&gt; 作为其第一个参数。

在您的情况下,ArrayList&lt;List&lt;String&gt;&gt; 不符合要求,因为List&lt;String&gt;List&lt;?&gt; 本身不是Comparable 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2020-05-18
    • 2014-07-22
    相关资源
    最近更新 更多