1

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

4

3 回答 3

8

HashSet您可以拥有一个Map<Integer, Set<String>>.

因此,在添加时,您可以测试 akey是否已经存在。如果有键,只需将单词添加到Set该键的 ,否则添加一个新条目。

因此,这是您需要遵循的步骤:-

  • 获取单词的长度。说length
  • 测试是否Map包含键length-Map#containsKey(Object)

  • 如果lengthkey 在那里,获取Set那个 key - Map#get(Object)。并将其添加wordSet.

  • 如果lengthkey 不存在,则创建一个新HashSet的,在其中添加当前单词。Map并在您的当前长度作为键添加一个新条目-Map#put(K, V)
于 2013-01-23T15:33:40.200 回答
2

您可以将它们放在一个循环中并将它们放入列表或数组中......

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

for (int x=0;x<16;x++) {
  sets.add(new HashSet<String>());
}
于 2013-01-23T15:34:27.497 回答
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 但这样代码看起来更好,而且实际上只浪费很少的内存。

于 2013-01-23T15:36:29.847 回答