2010-06-01 3 views
0

그것은 nooby 질문이있을 수 있습니다,하지만 난 전에 그것을 필요로 적이 :스와핑 스위치의 경우는

내가 여러 문자열을 가지고 있고 주어진 것들에 비교하고 싶다. ..

언뜻보기에 그것은 사용 가능한 모든 항목을 확인하는 스위치/사례 구성으로 이어질 것입니다.

이러한 문자열을 키/값 데이터로 교환하는 좀 더 우아한 방법이 있습니까?

접견, poeschlorn

답변

1

업데이트 : 내 나쁜. 나는 이것을 대소 문자를 구별하지 않는 검색으로 잘못 읽었다.

대소 문자를 구분하는 것은 쉽습니다. Java는 문에 String을 아직 지원하지 않습니다.

if (string1.equals(string2)) { 
    ... 
} else if (string1.equals(string3)) { 
    ... 
} 

또는 루프로 : 가장 쉬운 해결책은

물론
String[] matches = new String[] { 
    "abcd", 
    "efgh", 
    "ijkl" 
}; 

for (String match : matches) { 
    if (matches.equals(string)) { 
    ... 
    } 
} 

,이 선형 (O (N))과 확장되지 않고 단순하고 간단한 충분하다 케이스의. 보다 나은 솔루션은 해시 기반 검색 사용하는 것이다

Set<String> matches = new HashSet<String>(); 
matches.add("abcd"); 
matches.add("efgh"); 
matches.add("ijkl"); 

if (matches.contains(string1)) { 
    ... 
} 

이것은 거의 선형 (O (1))를 검색하고 String의 다수 훨씬 더 확장된다.

+0

많은 문자열이있는 경우 일치 메커니즘이 상당히 느릴 수 있습니다 - O (n) - 미리 정의 된 HashSet 또는 HashMap을 사용하면 예상되는 O (1) 조회가 발생합니다. –

3

예, 문자열을 HashMap의 키로 사용하고 하나의 동작 만있는 경우가 아니면 해당 값이 키가 일치하면 취할 동작을 정의하는 개체가됩니다.이 경우 단순히 HashSet , 문자열이 집합에 있는지 테스트하고 적절하게 조치를 취하십시오.

+0

복잡성을 정당화하기 위해 일치시킬 문자열이 충분히 커지 않는 한 대/소문자 구분이 너무 복잡합니다. – cletus

+0

@cletus, 영업 담당자는 대소 문자를 구별하지 않아야한다고 말하는가? 그리고, 대문자와 소문자를 구별 할 필요가없는 경우는, 맵의 소문자 키나 세트의 소문자의 값을 사용해, 룩 업을 실시하기 전에 입력 캐릭터 라인을 소문자로 변환 해주세요. –

+0

내 잘못입니다. 질문을 잘못 읽었습니다. – cletus