我有一个编程赋值,它需要一个包含方法来覆盖原始的arrraylist包含方法。该方法应检查列表是否已排序,然后在数组列表上对键执行二进制搜索。如果arraylist没有排序,那么它应该只执行arraylist中的原始包含方法。这是我现在的代码。
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");
}
}
当我运行它时,我没有得到任何错误,但是当我尝试执行搜索时,什么也没有发生。
发布于 2018-09-24 09:41:21
正如@John Bollinger在评论中所说的那样。您的方法不会覆盖contains()
方法,因此根本不会调用该方法的实现。
您的方法应该与List
接口中定义的contains()
方法的签名相匹配,因此这实际上覆盖了ArrayList
类的实现。
所以你的方法应该是这样的:
public class MyList extends ArrayList<String> {
@Override
public boolean contains(Object o) {
// your logic goes here
}
}
还要记住,如果数组没有排序,你的方法不会做任何事情,这不是你描述的问题应该做的事情。要在ArrayList
中使用contains
方法的默认实现,您可以编写:
if (sorted)
// do binary search
else
return super.contains(key);
https://stackoverflow.com/questions/52469733
复制相似问题