2014-04-15 4 views
1

자바를 처음 사용하고 Collections.binarySearch에 문제가 발생하면 javadoc을 비난하고 여기에서 많은 답변을 확인하지만 여전히 문제를 해결합니다. . 실제 코드 앞에, 배경 : 나는 사용자가 연락처 북을 관리 할 수 ​​있도록 코드를 작성 중이다. 이 내 연락 클래스 i는 클래스 내부BinarySearch는 "컬렉션이 인수에 적용되지 않습니다"

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

또한 비교기를 가지고

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

이고, 나는 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)

내가 필요로 당신의 다시 너희들을 돕는다, 모든 도우미들에게 감사해라!

답변

1

String 대신 검색 할 연락처의 name이 포함 된 Contact을 인수로 보내야합니다. 은 ContactString이 아닌 Contact을 비교합니다.

코드는 다음과 같습니다

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

방법 서명은 귀하의 T는 String입니다

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

입니다. 따라서 List에는 String의 하위 클래스가 있어야합니다. Comparator에서도 마찬가지입니다. 이제 Contact class does not extend String .. 오류가 발생했습니다.

관련 문제