這是非常低效的。
不是循環遍歷每個可能的長度值,然後每個可用的單詞,只需循環遍歷文檔中的可用單詞並計算它們的長度?
例如:
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);
}
}
搜索數組是O(n)。 –
問:是否有更有效的方法來生成此直方圖?答:實際上,可能沒有更多*效率低下的方法:)。 Jeff,dasblinklight和Jon Skeet都推薦基本相同的東西 - 試試:) – paulsm4