2015-01-09 4 views
0
public class CustomString { 
    public char value[]; 
    public int offset; 
    public int count; 
    public int hash; 
} 


CustomString one = new CustomString(); 
char valueOne[] = {'A','N'}; 
one.count = 2; 
one.hash = 0; 
one.offset = 0; 
one.value = valueOne; 

CustomString two = new CustomString(); 
char valueTwo[] = {'F','A','N'}; 
two.count = 3; 
two.hash = 0; 
two.offset =1; 
two.value = valueTwo; 

compareTo(one,two) 

compareTo 메소드 : "FAN은"나는 1로 오프셋 사용한에 대한 이후로직 (오프셋의 역할) 문자열의

public static int compareTo(CustomString one, CustomString two) { 
    int len1 = one.count; 
    int len2 = two.count; 
    int n = Math.min(len1, len2); 
    char v1[] = one.value; 
    char v2[] = two.value; 
    int i = one.offset; 
    int j = two.offset; 

    if (i == j) { 
     int k = i; 
     int lim = n + i; 
     while (k < lim) { 
      char c1 = v1[k]; 
      char c2 = v2[k]; 
      if (c1 != c2) { 
       return c1 - c2; 
      } 
      k++; 
     } 
    } else { 
     while (n-- != 0) { 
      char c1 = v1[i++]; 
      char c2 = v2[j++]; 
      if (c1 != c2) { 
       return c1 - c2; 
      } 
     } 
    } 
    return len1 - len2; 
} 

, 나는 FAN "의"을 "생각 에 ""와 비교 될 것이다 "하고 compareToString의 반환 return len1 - len2; 때문에하지 않았다 0.But 반환

내 질문은, compareTo 방법 offset의 목적은 무엇인가? 항상 오프셋은 0.입니다. 둘 다 또는 다른 오프셋을 사용하여 예제를 제공 할 수 있습니까?

+1

당신은 java.lang.String에 대해 이야기하고 있습니까? CustomString이란 무엇입니까? 이게 당신의 코드입니까 아니면 다른 사람입니까? – aioobe

+0

예. java.lang.String에 대해 얘기했습니다. 오프셋을 0 이외의 값으로 변경하여 compareTo를 디버깅하고 싶었습니다. 그래서 java.lang.String을 시뮬레이트하기 위해 'CustomString' 클래스를 작성했습니다. – user104309

답변

3

pre-Java7 java.lang.String을 모방하려는 경우 offset 필드는 일정 시간 substring() 작업을 구현하는 데 사용됩니다. 따라서

CustomString two = new CustomString(); 
char valueTwo[] = {'F','A','N'}; 
two.value = valueTwo; 
two.offset = 1; 
two.count = 2; // <------- the number of characters in the string "AN" 

, one.compareTo(two) 평가 것에 0 (len1 == len2 == 2 이후) : Time complexity of Java's substring()

이 예를 들어이 연관하려면 다음과 같이하십시오, "FAN".substring(1, 3)count3하지, 2에 설정합니다.