【问题标题】:Getting Objects with specified values from hashtable Java从哈希表 Java 中获取具有指定值的对象
【发布时间】:2018-05-16 06:51:03
【问题描述】:

我有一个带有 (String, Object) 的哈希表。我必须通过键字符串的长度来分隔所有对象,并创建一个长度相同的字符串数组。有人可以指导我如何做到这一点吗? 到目前为止我的代码:

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

【问题讨论】:

  • 最终输出中有多少个实际数组?你有没有在这个问题上做过任何工作?
  • 一个数组里面有多个数组。
  • 那么问题到底是什么?
  • 您的问题得到解答了吗?

标签: java data-structures hashtable


【解决方案1】:

您的循环方式效率低下,因为您可能没有很多特定大小的单词,因此您将不必要地检查每个单词的长度与 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 2015-06-01
    • 2016-11-18
    • 2013-12-11
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多