这是非常低效的。
与其遍历每个可能的长度值,然后遍历每个可用的单词,不如简单地遍历文档中的可用单词并计算它们的长度,怎么样?
例如:
Map<Integer, Integer> frequencies = new HashMap<Integer, Integer>();
for(int i=0; i<list.size(); i++) {
String thisWord = list.get(i);
Integer theLength = (Integer)(thisWord.length());
if(frequencies.containsKey(theLength) {
frequencies.put(theLength, new Integer(frequencies.get(theLength).intValue()+1));
}
else {
frequencies.put(theLength, new Integer(1));
}
}
然后,如果 中不存在该键,则HashMap
您知道文档中不存在该长度的单词。如果密钥确实存在,您可以准确查找发生了多少次。
注意:此代码示例的某些方面是为了防止对装箱和拆箱产生任何额外的混淆。可以写得稍微干净一些,我当然会在生产环境中这样做。此外,它假设您不知道任何最小或最大单词长度(因此稍微灵活、可扩展和包罗万象)。否则,用于简单声明原始数组的其他技术也可以正常工作(请参阅 Jon Skeet 的回答)。
对于利用自动装箱的更清洁的版本:
Map<Integer, Integer> frequencies = new HashMap<Integer, Integer>();
for(int i=0; i<list.size(); i++) {
String thisWord = list.get(i);
if(frequencies.containsKey(thisWord.length()) {
frequencies.put(thisWord.length(), frequencies.get(thisWord.length())+1);
}
else {
frequencies.put(thisWord.length(), 1);
}
}