2017-05-15 2 views
0

자바에서 이진 검색을 사용하여 학습하고 있습니다. 정수리스트에서는 예상 인덱스를 리턴하지만 char 또는 String리스트 (코드 예)에서는 음의 인덱스를 리턴합니다. 이는 예상치 못한 인덱스입니다 (index = -4). List은 이진 검색이 작동하기 위해 정렬해야합니다Java에서 문자열 바이너리 검색

List<String> str = new ArrayList<>(); 
str.add("Hey"); 
str.add("Hi"); 
str.add("Bye"); 
int index = Collections.binarySearch(str,"Hi"); 
System.out.println(index); 

답변

2

. String 자연 순서는 사전 식 순서이므로 "Bye""Hey""Hi" 앞에 와야합니다.

List<String> str = new ArrayList<>(); 
str.add("Bye"); 
str.add("Hey"); 
str.add("Hi"); 

int index = Collections.binarySearch(str,"Hi"); 
System.out.println(index); 
+1

또는 더 동적 인 접근 방식 (즉, 수동으로 정렬 할 필요는 없지만 Java에서는 그렇게 할 수 있습니다),'Collections # sort'. – nbokmans

3

이진 검색의 사전 조건을보십시오 : 기본 데이터가 정렬해야합니다.

그래서, 종류의 첫 번째 목록.

그런 다음 해당 메서드에서 반환 한 인덱스가 0과 목록의 크기() 사이인지 확인하고 싶습니다. 문자열이 목록에서 발견되어 0이 아닌 색인을 반환 할 것으로 예상하는 것은 조금 순진합니다.

그 너머; real 여기에 답하십시오. 내장 기능을 맹목적으로 사용하지 마십시오. javadoc처음으로을 읽어 보면이 방법이 무엇을하는지 이해할 수 있습니다. 예를 들어 어떤 값을 반환할까요?