2017-12-02 2 views
-2

私は(String、Object)を持つハッシュテーブルを持っています。すべてのオブジェクトをキーストリングの長さで分離し、同じ長さのストリングの配列の配列を作成する必要があります。誰かが私を導くことができますか? これまでの私のコード:あなたは不それぞれの長さのためにiに対して一つ一つの単語の長さをチェックすることがありますので、あなたが特定のサイズの多くの単語を持っていない可能性があるためハッシュテーブルから指定された値を持つオブジェクトを取得するJava

Set<String> keys = words.keySet(); 
ArrayList<ArrayList<Word>> outer = new ArrayList<ArrayList<Word>>(); 
ArrayList<Word> inner = new ArrayList<Word>(); 

for(String key: keys) { 
    for (int i=0; i< 15; i++) { 
     if (key.length() == i) { 
      inner.add(words.get(key)); 
     } 
     outer.add(i, inner); 
    } 
} 
+0

がありますか?あなたはまだこの問題について何か作業をしましたか? –

+0

内部に複数の配列を持つ1つの配列があります。 – Dany

+0

それでは、どういう疑問がありますか? – Mureinik

答えて

0

あなたがループしている方法は非効率的です。一度あなたの単語のリストを一度見ることができ、地図を使って長さを表すキーと単語を関連づけ、最後にリストを照合することができます。

これを試してください。最終的な出力にどのように多くの実際の配列

Map<Integer, List<String>> sizeMap = new HashMap<>(); 

for (String key: keys) { 
    int length = key.length(); 
    if (sizeMap.containsKey(length)) { 
     // If we already have a list initialized, add the word 
     List<String> mWords = sizeMap.get(length); 
     mWords.add(key); 
    } else { 
     // Otherwise, add an empty list so later we don't try appending to null 
     sizeMap.put(length, new ArrayList<>()); 
    } 
} 

// Convert the map to a list of lists 
for (List<String> sizeGrouping : sizeMap.values()) { 
    outer.add(sizeGrouping); 
} 
関連する問題