我正在尝试编写将使用for循环创建多个HashSet的代码。我试图根据它们的长度存储唯一单词的出现次数。例如,长度为4的单词将出现在HashSet A中,而长度为20的单词将出现在HashSet B中。而不是手动创建16个HashSet,有没有办法让我使用for循环(int i=4; i<21; i++)
?谢谢!
答案 0 :(得分:8)
您可以拥有HashSet
,而不是拥有16个不同的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)
答案 1 :(得分:2)
您可以将它们放在一个循环中并将它们放入列表或数组中......
List<HashSet<String>> sets = new ArrayList<HashSet<String>>()
for (int x=0;x<16;x++) {
sets.add(new HashSet<String>());
}
答案 2 :(得分: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);
}
P.S。我没有使用数组索引0..3,但代码看起来更好,而且它实际上只是非常少的内存浪费。