我有一个编程任务,需要一个contains方法来覆盖原始的arrraylist contains方法。该方法应检查列表是否已排序,然后在arraylist上执行二进制搜索以查找键。如果未对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");
}
}
运行它时没有任何错误,但是当我尝试执行搜索时,什么也没有发生。
答案 0 :(得分:0)
如@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);