2011-05-30 78 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

你也可以对列表进行排序,然后算一个词重复了多少遍

添加字母顺序排列的奖金输出中

相关问题