繁体   English   中英

尝试使用我自己的比较器进行BinarySearch时出错

[英]Error trying to binarySearch with my own comparator

我正在尝试创建一个类,在该类中可以借助二进制搜索将对象快速插入到类列表中。

这是我的班级和内部班级:

public class PostingsList implements Iterator<PostingsEntry>{

    /** The postings list */
    private ArrayList<PostingsEntry> list = new ArrayList<PostingsEntry>();

    class PostingsEntryComparator implements Comparator{
        @Override
        public int compare(PostingsEntry pA, PostingsEntry pB){
            if(pA.docID < pB.docID){
                return -1; 
            }   
            else if(pA.docID == pB.docID){
                return 0;
            }   
            else{
                return 1;
            }   
        }   
    }     

    public void add(PostingsEntry newPostingsEntry){ 
        //put in the right place
        PostingsEntryComparator pc = new PostingsEntryComparator();
        int res = Collections.binarySearch(list, newPostingsEntry, pc);
        if(res < 0){
            list.add(-res-1, newPostingsEntry);
        }
        else{
            System.out.println("already exists");
        }
    }
}

内部类用于比较list的对象,以便Collections.binarySearch可以工作。 但是,我收到此错误。 这是什么意思,我该怎么办?

n180-p69:new sahandzarrinkoub$ sh compile_all.sh
ir/PostingsList.java:22: error: PostingsList.PostingsEntryComparator is not abstract and does not override abstract method compare(Object,Object) in Comparator
    class PostingsEntryComparator implements Comparator{
    ^
ir/PostingsList.java:23: error: method does not override or implement a method from a supertype
        @Override
        ^

2 errors
class PostingsEntryComparator implements Comparator {
    ...
}

实现“原始” Comparator接口,该接口接受Object参数,即compare(Object,Object) 但是,这不是您要覆盖的内容,因为您的比较器特定于PostingsEntry

因此,您需要实现Comparator<PostingsEntry>

class PostingsEntryComparator implements Comparator<PostingsEntry> {
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM