二进制搜索自定义列表 - android

时间:2017-07-25 13:02:36

标签: java android collections

在我的adapter recyclerView我比较两个列表如下:

for (int i = 0; i < existImages.size(); i++) {
  if (jsonInstagramList.get(position).getId().equalsIgnoreCase(existImages.get(i).getImageID())) {
    holder.insertedProduct.setVisibility(View.VISIBLE);
    break;
  } else {
    holder.insertedProduct.setVisibility(View.GONE);
  }
}

existImagesprivate List<ExistImage> existImages;jsonInstagramListprivate List<Node> jsonInstagramList;

如何在此搜索或其他方式中使用binary search加快速度?

1 个答案:

答案 0 :(得分:0)

根据您的具体情况,这可能非常简单。

在Collections类中已经实现了二进制搜索(链接到javadoc)。所以你只需要调用该方法。

当然,请记住:

  

使用二进制搜索算法在指定列表中搜索指定的对象。列表必须根据其元素的自然顺序按升序排序......

这意味着您的列表应该已经排序。所以,真正的答案是首先看看你当前的循环:

jsonInstagramList.get(position).getId().equalsIgnoreCase(existImages.get(i).getImageID()

发现您无法将其转换为二进制搜索。

换句话说:如果查找元素的代码被频繁调用以至于需要使用二进制搜索 - 那么您必须提前准备您的数据。

含义:二进制搜索在相同类型的元素的排序列表中找到。因此,您首先必须创建包含您要搜索的内容的列表!