1

forループを使用して複数のHashSetを作成するコードを作成しようとしています。ユニークな単語の出現をその長さに基づいて保存しようとしています。たとえば、長さ4の単語はHashSet Aに、長さ20の単語はHashSet Bに配置されます。16個のHashSetを手動で作成する代わりに、forループを使用する方法はあります(int i=4; i<21; i++)か?ありがとうございました!

4

3 に答える 3

8

16 の異なる をHashSet使用するのではなく、 を使用できますMap<Integer, Set<String>>

したがって、追加中に、 akeyが既に存在するかどうかをテストできます。キーが存在する場合は、そのキーの単語をSet追加するか、新しいエントリを追加します。

そのため、従う必要がある手順は次のとおりです。 -

  • 単語の長さを取得します。と言うlength
  • Mapキーが含まれているかどうかをテストしますlength-Map#containsKey(Object)

  • lengthキーが存在する場合はSet、そのキーの を取得します - Map#get(Object)。それに を追加wordSetます。

  • key がない場合lengthは、新しい を作成し、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 に答える