2011-05-30 79 views
1

我對如何.. 防爆計數的ArrayList匹配的元素,在Java中的問題:我的ArrayList中包含[體育,體育,球,球員,體育]如何計算的ArrayList中匹配的元素,在Java中

我需要像輸出:

word sport frequency 3 
word ball frequency 1 
word player frequency 1 

感謝提前

+0

想象一下,您一次只能看到該數組列表中的一個項目。想象一下。你將如何解決這個問題? – blizpasta 2011-05-30 14:55:52

回答

5

使用地圖。

(這當然會用Guava Multiset容易得多,如其他人所說)

2

如果你願意在外部依賴拉:谷歌的番石榴庫包含一個Multiset的各種實現方式,這是你想要的東西的名字。如果你不願意依賴這個庫,你至少可以看看源代碼。 Multiset基本上是某種類型的映射到保存集合中特定項目的計數的整數。

當然我假設你實際上能夠用Multiset替換你的ArrayList。

+0

+1爲Guava Multiset,雖然我懷疑OP是否準備使用像Guava一樣複雜的庫。 – 2011-05-30 15:20:26

+0

爲什麼在Java有'Map '時使用外部庫? – MarcoS 2011-05-30 15:38:14

+0

@MarcoS:一般情況下(在實際應用中使用)'Multiset'有一個API比這個'Map' API更適合這個。然而,我同意,OP可能不需要它在他們的例子中的簡單任務(特別是如果它是作業)。 – ColinD 2011-05-30 16:28:35

1

複製內容到另一個數據結構:

Map<String, Integer> 

密鑰(String)這個詞,所述Integer值存儲計數。如果你想要的話,以字母順序排序

Map<String, Integer> occurrencies = new HashMap<String, Integer>(); 
for (String word : list) { 
    occurrencies.put(word, occurrencies.containsKey(word) 
    ? occurrencies.get(word) + 1 : 1); 
} 
for (Entry<String, Integer> entry : occurrencies.entrySet()) { 
    System.out.println("Word: "+entry.getKey() 
        + ", occurences: "+entry.getValue()); 
} 

,使用TreeMap代替HashMap

1

你也可以對列表進行排序,然後算一個詞重複了多少遍

添加字母順序排列的獎金輸出中

相關問題