java - 二分查找给出错误类型 "Collections is not applicable for the arguments"

标签 java collections binary-search

我是java新手,遇到了Collections.binarySearch的问题,我已经阅读了javadoc并在这里检查了很多答案,但仍在处理问题。在实际代码之前,先介绍一下背景: 我正在编写一个代码,让用户管理通讯录。 这是我的联系人类(class)

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());  
}

也在类(class)内部,我为 copmare 本身设置了一个不同的类(class)

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)

我再次需要你们的帮助,谢谢你们!

最佳答案

您应该发送一个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());  
}

关于java - 二分查找给出错误类型 "Collections is not applicable for the arguments",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086394/

相关文章:

java - 创建集/列表

algorithm - 连续子数组的最大和不大于 k

java - 将单词转换为 2 个字母的数组

java - 如何使用java在mysql的日期时间字段中插入当前日期

Java 日期 - 12am 存储为 24?

java - 为什么点击 NUM0-9 按钮的 Java 代码不打印出该字符?

java - 非多线程应用程序中 vector 的使用

multithreading - 如何设计Mutex的可变集合?

arrays - 使用此算法在最坏情况下二分查找将进行多少次比较?

使用 BinarySearch 算法的 C++ 函数(.bin 文件)