使用循环Java创建多个HashSet

时间:2013-01-23 15:31:06

标签: java for-loop hashset

我正在尝试编写将使用for循环创建多个HashSet的代码。我试图根据它们的长度存储唯一单词的出现次数。例如,长度为4的单词将出现在HashSet A中,而长度为20的单词将出现在HashSet B中。而不是手动创建16个HashSet,有没有办法让我使用for循环(int i=4; i<21; i++)?谢谢!

3 个答案:

答案 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,但代码看起来更好,而且它实际上只是非常少的内存浪​​费。