2013-01-23 3 views
1

for 루프를 사용하여 여러 개의 HashSet을 만드는 코드를 작성하려고합니다. 나는 길이에 따라 고유 한 단어를 저장하려고합니다. 예를 들어, 길이 4의 단어는 HashSet A에 들어가고 길이 20의 단어는 HashSet B에 들어갑니다. 수동으로 16 HashSets을 만드는 대신 for 루프를 사용하는 방법이 있습니까 (int i=4; i<21; i++)? 고맙습니다!루프를 사용하여 여러 개의 HashSet 만들기 Java

답변

8

HashSet이 16 개가 아닌 Map<Integer, Set<String>> 일 수 있습니다.

그래서 추가하는 동안 key이 이미 있는지 테스트 할 수 있습니다. 키가 있으면 해당 키의 단어를 Set에 추가하고 그렇지 않으면 새 항목을 추가하십시오.

그래서, 바로 여기에 단계는 당신이 따라야합니다 : -

  • 단어의 길이를 가져옵니다. 웨일스 어 length라고 말하십시오.
  • 테스트 Maplength 키가 포함되어있는 경우 - Map#get(Object) - length 키가있는 경우 Map#containsKey(Object)

  • , 그 키에 대한 Set를 얻을. 그리고 해당 Setword을 추가하십시오.

  • length 키가없는 경우 새 HashSet을 만들고 여기에 현재 단어를 추가하십시오. 그리고 키로서 현재 길이로 Map에 새 항목을 추가 - Map#put(K, V)
+0

정말 고마워요! 마지막 질문이 하나 있는데 어떻게 세트에 단어를 추가합니까? –

+0

@ EricaFischer-Colbrie ..'Set # add (Object)'메쏘드 사용 –

2

당신은 루프를하고 목록 또는 배열에 넣어 수 있습니다 ...

List<HashSet<String>> sets = new ArrayList<HashSet<String>>() 

for (int x=0;x<16;x++) { 
    sets.add(new HashSet<String>()); 
} 
+0

'List'를 인스턴스화 할 수없고'push()'메쏘드가 없습니다 ... – jlordo

+0

ㅎ, 맞아. 너무 오랫동안 그루비를 사용 해왔다. 편집 됨. –

+2

왜'x'를 두 번 증가 시키나요? – jlordo

2
HashSet<String>[] sets= HashSet<String>[21]; 
for(int i=4; i<21; i++) 
    sets[i]= new HashSet<String>(); 

나중에 단어를 추가하고 싶을 때 :

for(String word: words){ 
    sets[word.length()].add(word); 
} 

Ps 나는 배열 인덱스 0..3을 사용하지 않지만 코드는이 방식으로 더 멋지게 보이며 실제로 메모리가 거의 낭비되지 않습니다.

관련 문제