有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java BinarySearch提供错误类型“集合不适用于参数”

我是java新手,在集合方面遇到了问题。binarySearch,我已经阅读了javadoc并在这里检查了很多答案,但仍然在处理一个问题。在实际代码之前,有一个背景: 我正在编写一个代码,允许用户管理联系人簿。 这是我的联络班

public class Contact implements Comparable<Contact>  {
private String name;
private String email;
private String phone;
private String address;

我有一个比较器

public int compareTo(Contact contact) {  
    return name.compareToIgnoreCase(contact.getName());  
}

也在类内部,我为copmare本身创建了一个不同的类

public class ContactComparator implements Comparator<Contact> {
@Override
public int compare(Contact first, Contact second) {
  String one = first.getName();
  String two = second.getName();
  int f = one.compareToIgnoreCase(two);
  return f;
}

}

在代码中,我一直在对列表进行排序,就像这里有人以前帮助过我一样

Collections.sort(contacts , new ContactComparator())

现在我的问题是,我试图在搜索方法中使用二进制搜索,如下所示:

public int ContactIndex(final String name){
    return Collections.binarySearch(contacts, name, new ContactComparator());  
}

但它给了我一个错误:

The method binarySearch(List, T, Comparator) in the type Collections is not applicable for the arguments (ArrayList, String, ContactComparator)

我再次需要你们的帮助,伙计们,谢谢你们所有的帮助者


共 (2) 个答案

  1. # 1 楼答案

    方法签名是

    public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
    

    你的T是String。所以您的列表必须包含String的子类。比较器也是如此。现在你的Contact class does not extend String。。所以你得到了错误

  2. # 2 楼答案

    您应该发送一个Contact作为参数,该参数包含要搜索的所需联系人的name,而不是只发送一个String。请注意,您的ContactComparator比较了Contact不是ContactString

    代码如下所示:

    public int ContactIndex(final String name) {
        Contact contactToSearch = new Contact();
        contactToSearch.setName(name);
        return Collections.binarySearch(contacts, contactToSearch, new ContactComparator());  
    }