2013-01-23 76 views
1

我正在嘗試編寫使用for循環創建多個HashSet的代碼。我試圖根據它們的長度來存儲唯一單詞的出現次數。例如,長度爲4的單詞將進入HashSet A,而長度爲20的單詞將進入HashSet B.而不是手動創建16個HashSets,有沒有辦法讓我使用for循環(int i=4; i<21; i++)?謝謝!使用循環創建多個HashSet Java

回答

8

而不是有16個不同的HashSet的,你可以有一個Map<Integer, Set<String>>

因此,在添加時,您可以測試key是否已經存在或不存在。如果有密鑰,只需將該字添加到該密鑰的Set,否則添加一個新條目。

所以,我這裏還有你需要的步驟如下: -

  • 獲取單詞的長度。說length
  • 如果Map包含關鍵length測試 - Map#containsKey(Object)

  • 如果length關鍵是存在的,得到了​​Set該鍵 - Map#get(Object)。並將word添加到該Set

  • 如果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

呵呵,你是對的。一直在使用groovy。編輯。 –

+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,但代碼看起來更好,這實際上只是非常小的內存浪費。