您需要使用地圖 - 這是自動處理維護一個唯一的單詞列表。如果您重寫put
方法來聚合而不是覆蓋,則會自動累加計數。
private void readWords(final Iterator<String> in) {
final Map<String, Integer> wordMap = new HashMap<String, Integer>() {
@Override
public Integer put(String key, Integer value) {
final Integer origValue = get(key);
if (origValue == null) {
return super.put(key, value);
} else {
return super.put(key, origValue + value);
}
}
};
while (in.hasNext()) {
wordMap.put(in.next(), 1);
}
//just for display - not necessary
for (final Entry<String, Integer> entry : wordMap.entrySet()) {
System.out.println("Word '" + entry.getKey() + "' appears " + entry.getValue() + " times.");
}
}
測試:
List<String> strings = new LinkedList<String>();
strings.add("one");
strings.add("two");
strings.add("two");
strings.add("three");
strings.add("three");
strings.add("three");
readWords(strings.iterator());
輸出:
Word 'two' appears 2 times.
Word 'one' appears 1 times.
Word 'three' appears 3 times.
您可以按字母順序使用TreeMap
而非HashMap
排序的話 - 這可能會尋找更好的顯示;取決於你打算如何處理地圖。
你可以把這些單詞放在一個集合中嗎?這將不會執行重複操作。 – thegrinner 2013-03-08 16:41:00
@thegrinner沒有抱歉 – user2140783 2013-03-08 16:42:10