我是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
,而不是 Contact
和 String
。
代码如下所示:
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/