从散列表Java获取具有指定值的对象

时间:2017-12-02 07:34:52

标签: java data-structures hashtable

我有一个哈希表(String,Object)。我必须按键String的长度隔离所有对象,并创建一个长度相同的字符串数组数组。有人可以指导我,我怎么能做到这一点? 到目前为止我的代码:

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

1 个答案:

答案 0 :(得分:0)

您循环的方式效率很低,因为您可能没有多个特定大小的单词,因此您将不必要地针对每个长度检查每个单词对i的长度。您可以只浏览一次单词列表并使用地图将单词与表示其长度的键相关联,然后在最后整理列表。

试试这个:

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