Java中的数组列表二进制搜索

时间:2018-09-23 19:54:58

标签: java

我有一个编程任务,需要一个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");
    }
}

运行它时没有任何错误,但是当我尝试执行搜索时,什么也没有发生。

1 个答案:

答案 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);