通过仅传递对象进行手动二分查找

时间:2016-12-21 07:08:06

标签: java algorithm search

目前停留在二元搜索的问题上,要求我传递一个参数是一个对象。 但这可能吗?通常我会使用两个参数来解决这个问题。 通常使用二进制搜索我使用 - >

int binarySearch(int[] list, int searchItem) 
{ 
int mid=0; 
int start=0; 
int end=list.length-1; 
boolean found=false; 

//Loop until found or end of list. 
while (start <= end && !found) 
{ 
mid = (start + end) / 2; 
if (list[mid] == searchItem)
  found = true;
else 
  if (list[mid] > searchItem) 
    end = mid - 1;
  else 
    start = mid + 1;
}
if(found) 
return mid;
else 
 return(-1);
}

但是可以像这样输入一个参数吗?我需要搜索一个数组列表。

  public int binarySearch(Moon searchItem){
  int mid = 0;
  int start = 0;
  int end = moons.size() -1;
  boolean found = false;

  while(start <= end && !found){
      mid = (start + end) / 2;
      if(moons.get(mid).equals(searchItem)){
          found = true;
      }
      else{
          if(???)) {
          }
          else
            etc etc     
      }    
  }
  return 0;
}

1 个答案:

答案 0 :(得分:0)

首先,你应该回答这个问题:How to compare objects by multiple fields

然后,实施ComparableMoon课程。如果你不能改变Moon课程,那么你要创建Comparator

您需要覆盖Moon类中的compareTo方法,该方法可用于代替问题中的???