forループを使用して複数のHashSetを作成するコードを作成しようとしています。ユニークな単語の出現をその長さに基づいて保存しようとしています。たとえば、長さ4の単語はHashSet Aに、長さ20の単語はHashSet Bに配置されます。16個のHashSetを手動で作成する代わりに、forループを使用する方法はあります(int i=4; i<21; i++)
か?ありがとうございました!
質問する
1338 次
3 に答える
8
16 の異なる をHashSet
使用するのではなく、 を使用できますMap<Integer, Set<String>>
。
したがって、追加中に、 akey
が既に存在するかどうかをテストできます。キーが存在する場合は、そのキーの単語をSet
追加するか、新しいエントリを追加します。
そのため、従う必要がある手順は次のとおりです。 -
- 単語の長さを取得します。と言う
length
。 Map
キーが含まれているかどうかをテストしますlength
-Map#containsKey(Object)
length
キーが存在する場合はSet
、そのキーの を取得します -Map#get(Object)
。それに を追加word
しSet
ます。- 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 に答える