2014-02-28 4 views
0

?을 느리게하지 않고 큰 단어 목록 에서 두 번 이상 나타나는 값을 가져 오는 가장 좋은 방법은 무엇입니까? 내 파일에 1xx, xxx 단어이 있고 링크 된 목록에 넣습니다. 자, 이 한 번 이상가 나오는 단어만을 얻고 싶습니다.목록에서 하나 이상의 값이 발생합니까?

예를 들어, 목록이 포함되어있는 경우 :

....This is is is just a test test.... 

내가 istest을 얻고 반복자를 사용하여 다른 목록에 넣어 싶습니다.

내 코드가 맞는지 잘 모르겠다.이 문제를 해결하기위한 최선의 해결책은 아닌 것 같다.

for(int i = 0; i < word.size(); i++) { 
    Word s = word.get(i); 
    Word s1 = word.get(i+1); 
    if(s.equals(s1)) { 
     newWord.add(s); 
    } 
} 
+1

코드를 추가 할 수 있습니까? –

+0

단어를 목록 자체에 넣으면서 할 수 있습니다. – Sanjeev

+0

list 대신'''HashSet'''에 넣고''add()''메소드의 리턴 값을 확인하십시오. – NeplatnyUdaj

답변

0

목록을 정렬 할 수 있으면 중복 된 항목을 빠르고 쉽게 찾을 수 있습니다.

+0

이미 목록이 정렬되었으므로 모든 중복이 함께 그룹화됩니다. – JavaWannabee

1

목록 대신 모두 HashSet에 입력하고 add() 메서드의 반환 값을 확인하십시오.

HashSet<Word> wordSet = new HashSet<>(); 
for(int i = 0; i < word.size(); i++) { 
    if(!wordSet.add(word.get(i)){ 
     //Found duplicate 
    } 
} 

단어 목록 작성 중에/할 수도 있습니다.

+0

정말 좋은 접근 방식, 그것을 시도해 볼게. 고맙습니다. – JavaWannabee

+0

나는 이제까지 달리는 것이 왜 일어나는지 이해하지 못합니다. – JavaWannabee

+0

Word 클래스에서 equals() 및 hashcode() 구현을 확인하십시오. 그들이 모두 동일한 해시 코드를 가지고 있다면, 요소를 추가하는 것은 전체 집합을 트 레 버스합니다. – NeplatnyUdaj

1

단어를 키로 사용하여 hashmap을 빌드하면 값으로 계산됩니다.

for(each word in list) 
{ 
    count = 1; 
    if(map.contains(word)) 
    { 
     count = map.get(word); 
    } 
    else 
     count = 1; 
    map.put(word,count); 
} 

그런 다음 hashmap 반복하고 값이 1이면 확인하고 목록에 단어를 추가 할 수 있습니다.

+0

노력 해줘서 고맙지 만, 나는 'Map'을 시도했는데 효과가 있었다. 그러나 나는 이것을 위해 'Iterator'를 사용하고 싶다. – JavaWannabee

관련 문제