【问题标题】:BinarySearch gives an erroe type "Collections is not applicable for the arguments"二进制搜索给出错误类型“集合不适用于参数”
【发布时间】:2014-05-29 23:10:17
【问题描述】:

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

但它给了我这个错误:

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

我又需要你们的帮助了,谢谢大家!!!

【问题讨论】:

    标签: java collections binary-search


    【解决方案1】:

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

    代码如下所示:

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

    【讨论】:

      【解决方案2】:

      方法签名是

      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.. 所以你得到了错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多