Java Collections Collections.binarySearch()中的可比错误的第三个参数类型

时间:2016-02-01 10:07:34

标签: java

我正在尝试使用Collections.binarySearch();

来使用二进制搜索

我需要根据mId的{​​{1}}字段进行比较。

编译错误是:

  

发现'java.util.comparator'必需'java.util.comparator< ?   super java.lang.comparable< ?扩展java.lang.comparable< ?   扩展java.lang.comparable< ? >>>>'

Item

1 个答案:

答案 0 :(得分:1)

第二个参数应该是您要查找的Item不是itemIdCollections.binarySearch无法知道如何将intItem相关联。

您可能会发现将items存储为LinkedHashMap<Integer, Item>更容易(如果您需要保留插入顺序;如果您不关心订单,则可以使用HashMap),密钥是itemId。然后,您只需使用return items.get(itemId)

另外两点:

  1. 在构造函数中有副作用(在这种情况下,递增id)通常是一个坏主意:它使测试(以及其他事情)变得困难。最好将mId作为构造函数参数注入;
  2. mId最终,以便在构建后无法更改 - 如果您采用上面的Map建议,这尤其重要,因为您不希望地图键与返回的值不同。