计算ArrayList中单词的出现次数

Fra*_*gro 17 java arraylist count

我有一个ArrayList重复条目的单词.

我想计算和保存数据结构中每个单词的出现次数.

我该怎么做?

luk*_*ymo 55

如果你没有大字符串列表,最短的实现方法是使用Collections.frequency方法:

List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");

Set<String> unique = new HashSet<String>(list);
for (String key : unique) {
    System.out.println(key + ": " + Collections.frequency(list, key));
}
Run Code Online (Sandbox Code Playgroud)

输出:

aaa: 2
bbb: 1
Run Code Online (Sandbox Code Playgroud)

  • @smas,找到一个字频率= O(n),将List转换成Set = O(n),从Set中查找每个字的频率(最坏情况)= O(n); 这总计为O(2(n ^ 2)).哈希表解决方案最多为O(2n) (3认同)

Kos*_*801 12

有很多可能性.快速实现的解决方案可以是使用Map<String, Integer>String是每个单独的单词,Integer是每个单词的计数.

遍历列表并为其增加地图中的相应值.如果还没有条目,请添加值为1的条目.

wordList = ....;

Map<String, Integer> wordCount = new HashMap<String, Integer>();

for(String word: wordList) {
  Integer count = wordCount.get(word);          
  wordCount.put(word, (count==null) ? 1 : count+1);
}
Run Code Online (Sandbox Code Playgroud)