2012-11-11 2 views
0

사용자가 txt 파일에서 단어 목록을로드하는 작은 Java 프로그램을 만들었습니다. 사용자가이를 선택하여 단어 단위로 단어 집합을 TreeSet에 저장합니다. 이제 사용자가 텍스트 필드 (keyPressed)에 뭔가를 입력 할 때마다 함수가 호출되고 사용자가 입력 한 문자로 시작하는이 TreeSet의 모든 단어를 찾거나 반환하는 함수를 작성해야합니다. 새로운 기능 기준을 만족하는 사람을 내 솔루션은 세트의 마지막 요소를 처음부터 반복하는 것입니다 수 있도록 설정을 사용하여 밖으로 인쇄하는 :자바 - 입력 할 때 단어 목록의 단어를 효율적으로 표시하는 방법

Iterator <String>itr = dictionary.iterator(); 
String currentWord; 
String tempUserInput = "av"; // Temporary, to simulate user input 
while(itr.hasNext()){ 
    currentWord = itr.next(); 
    if (currentWord.startsWith(tempUserInput)) { 
     System.out.println(currentWord); // Temporary, to simulate output 
    } 
} 

가 이상 300000 단어를 전달해야하기 때문에이 제대로 작동하지만 반환 값에 대한 나의 질문은 :이 문제에 대한보다 효율적인 해결책이 있습니까?

답변

3

최상의 해결 방법은 문제에 적합한 데이터 구조 인 trie을 사용하는 것입니다. 접두어를 공유하는 요소 (일반적으로 문자열)를 작업하는 동안 복잡성을 줄이기 위해 사용됩니다. 일부 작업에 실제로

난 당신의 fromElement로 현재 입력하고 추가 충분한 'z' 문자로 toElement를 같은 문자열되는 문자열을 전달하여 작업 할 수있는

public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 

이를 속여하여 TreeSet의를 사용할 수있는 것 같아요 (이 길이는 TreeSet을 채우는 동안 계산 될 수 있음). 예 :

subSet("foo", true, "foozzzzzzzz", true); 
+0

감사합니다. 나는 확실히 트라이 작업을 시작할 것입니다. – Vorta

+0

subSet ("foo", true, "foo"+ "\ ufffd", false); 모든 경우를 다룹니다. – Fabien

관련 문제