在Java中使用HashMap的ArrayList中的HashMap添加元素

时间:2012-09-12 19:03:22

标签: java arraylist hashmap

我在Java中有一个源HashMap:

HashMap<String, Integer> keyWordFrequencies;

存储各种长度的关键字。我想遍历这个HashMap并计算存储在map的String部分中的ngrams的长度,它定义了每个关键字的文本。

有了这些数据,我想填充HashMaps的目标ArrayList:

ArrayList<HashMap<String, Integer>> keywordNgrams;

结果,ArrayList的索引对应于给定关键字的ngram大小减去1,即keywordNGrams(0)将接收unigrams,keywordNGrams(1)将接收bigrams,依此类推。但我不确定必要的语法。遍历源HashMap很容易:

Set keyWordFrequenciesSet = keyWordFrequencies.entrySet();
Iterator keyWordFrequenciesIterator = keyWordFrequenciesSet.iterator();
while(keyWordFrequenciesIterator.hasNext()) {
   Map.Entry m = (Map.Entry) keyWordFrequenciesIteratorIterator.next();
   int ngramLength = String_Utils.getLengthOfNgram(m.getKey().toString());

   Add element to keywordNgrams?

但是将元素添加到HashMap的目标ArrayList让我很困惑。我试过了:

keywordNgrams.add(ngramLength, m);

各种替代方案但无济于事。 m应该是HashMap的一个元素,而不是HashMap本身。任何人都可以建议我错在哪里吗?

理想情况下,我想遍历源HashMap keyWordFrequencies一次,并将keywordNgrams ArrayList初始化为可能的最大ngram大小。

2 个答案:

答案 0 :(得分:1)

由于您正在处理大小为5的ArrayList,我建议在初始化ArrayList时,通过在每个索引处添加一个新的HashMap实例来实现。像这样:

ArrayList<HashMap<String, Integer>> keywordNgrams = new ArrayList<HashMap<String, Integer>> ();

for(int index = 0; index < 5; index++){
  keywordNgrams .put(index, new HashMap<String, Integer>());
}

为了在ArrayList中添加元素,这是你要做的:

  • 访问特定的HashMap以获取指定的'n'-gram。您可以在ArrayList
  • 上使用get(int index)
  • 然后,您将添加返回的HashMap元素,然后再次为您的 keywordNgrams ArrayList执行相同HashMap的set(int index, E element)

示例代码可能是这样的:

HashMap<String, Integer> returnedMap = keywordNgrams.get(index); //where index is the position in the list;
returnedMap.put(key, value); //where key & value is the information that you would want to add to your HashMap
keywordNgrams.set(index, returnedMap);

答案 1 :(得分:0)

由于你知道最大的ngram大小,我建议预先填充keywordNgrams

List<Map<String, Integer>> keywordNgrams =
    new ArrayList<Map<String, Integer>>();
for(int i = 0; i < 5; ++i)
    keywordNgrams.add(new HashMap<String, Integer>());

然后你可以写:

for(final String keyword : keyWordFrequencies.keySet())
    keywordNgrams.get(String_Utils.getLengthOfNgram(keyword) - 1)
            .put(keyword, keyWordFrequencies.get(keyword));
相关问题