java - Java中的数组列表二进制搜索
问题描述
我有一个编程任务,需要一个包含方法来覆盖原始数组列表包含方法。该方法应检查列表是否已排序,然后对数组列表执行二进制搜索以查找键。如果 arraylist 没有排序,那么它应该只执行 arraylist 中的原始 contains 方法。这是我现在的代码。
public void contains(String key) {
System.out.println("Initializing");
if(isSorted()) {
int first = 0;
int last = this.size() - 1;
while(last >= first) {
int mid = (first + last) / 2;
if (this.get(mid).equals(key)) {
System.out.println(this.get(mid));
}
if (this.get(mid).compareTo(key) == 1) {
System.out.println(this.get(mid));
first = mid + 1;
}
if (this.get(mid).compareTo(key) == -1) {
System.out.println(this.get(mid));
last = mid - 1;
}
}
}
else {
System.out.println("Character does not exist");
}
}
运行它时我没有收到任何错误,但是当我尝试执行搜索时没有任何反应。
解决方案
正如@John Bollinger 在评论中所说。您的方法不会覆盖该contains()
方法,因此您的方法实现根本不会被调用。
contains()
您的方法应该与定义接口的方法的签名相匹配List
,这样实际上就是重写了ArrayList
类的实现。
所以你的方法应该是这样的:
public class MyList extends ArrayList<String> {
@Override
public boolean contains(Object o) {
// your logic goes here
}
}
另请记住,如果您的数组未排序,则您的方法不会执行任何操作,这不是您描述问题时应该执行的操作。要使用该contains
方法的默认实现,ArrayList
您可以编写:
if (sorted)
// do binary search
else
return super.contains(key);
推荐阅读
- sql - 在exec子句中获取存储过程的结果参数
- python - 在 pandas value_counts() 中使用条件
- python - 在 python 中找不到 c++ 扩展库
- python - Trying to run TensorBoard for the First Time
- javascript - 使用二进制搜索将字符串插入排序的字符串数组
- javascript - 如何对包含对应该首先出现的其他对象的引用的对象数组进行排序?
- python - 在我的程序中出现类型错误(python 初学者)
- javascript - 如何对 NeDB 数据库进行排序以获取响应?(Javascript 回调/箭头函数语法混乱)
- android - 无效的自定义 PageKeyedDataSource 使回收器视图跳转
- asp.net-mvc - 使用默认 {controller}/{id} 路由和 {controller}/{action}/{id} 路由时与路由冲突