二进制搜索提供错误类型“集合不适用于参数”

时间:2014-04-15 14:16:32

标签: java collections binary-search

我是java新手并遇到Collections.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());  
}

但它给了我这个错误:

  

类型集合中的方法binarySearch(List,T,Comparator)不适用于参数(ArrayList,String,ContactComparator)

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

方法签名是

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

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