2017-12-02 25 views
-2

Ich habe eine Hashtabelle mit (String, Object). Ich muss alle Objekte durch die Länge des Schlüssels String trennen und ein Array von Arrays von Strings mit der gleichen Länge erstellen. Kann mir jemand sagen, wie ich das schaffen könnte? Mein Code so weit:Abrufen von Objekten mit angegebenen Werten aus der Hashtabelle 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

Wie viele tatsächliche Arrays gibt es in der endgültigen Ausgabe? Hast du schon mal an diesem Problem gearbeitet? –

+0

Es gibt ein Array mit mehreren Arrays innerhalb. – Dany

+0

Was genau ist die Frage? – Mureinik

Antwort

0

Die Art und Weise Sie Looping ist ineffizient, da man nicht viele Worte bestimmter Größen haben, so dass Sie unnötig die Länge jedes einzelnen Wort gegen i für jede Länge überprüft sein werden. Sie können Ihre Wörterliste nur einmal durchgehen und eine Karte verwenden, um Wörter mit den Schlüsseln zu verknüpfen, die ihre Längen darstellen, und dann die Listen am Ende zusammenstellen.

Try this:

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); 
} 
Verwandte Themen