方法1:计数法,也是最笨的方法,即循环遍历该集合,当发现某元素时,计数值加1
List list = Arrays.asList("1", "2", "3", "1", "1", "2");
String element = "1";
int count = 0;
for (String str : list) {
if (element.equals(str)){
count++;
}
}
System.out.println("元素" + element + "出现次数:" + count);
输出:元素1出现次数:3
方法2:利用map的特性,其实也是计数法,元素是键,次数是值
List list = Arrays.asList("1", "2", "3", "1", "1", "2");
Map map = new HashMap<>();
for (String element : list) {
map.put(element, map.getOrDefault(element, 0) + 1);
}
for (Map.Entry entry : map.entrySet()) {
System.out.println("元素" + entry.getKey() + "出现次数:" + entry.getValue());
}
输出:
元素1出现次数:3
元素2出现次数:2
元素3出现次数:1
方法3:使用集合工具类:java.util.Collections.frequency
List list = Arrays.asList("1", "2", "3", "1", "1", "2");
int count = Collections.frequency(list, "1");
System.out.println(count);
输出:3
方法4:使用java.util.stream中的groupingBy()方法,这是jdk8的特性,对流进行自定义分组,如同sql语句中的group by一样
List list = Arrays.asList("1", "2", "3", "1", "1", "2");
Map frequencyMap = list.stream().collect(Collectors.groupingBy(s -> s, Collectors.counting()));
for (Map.Entry entry : frequencyMap.entrySet()) {
System.out.println("元素" + entry.getKey() + "出现次数:" + entry.getValue());
}
输出:
元素1出现次数:3
元素2出现次数:2
元素3出现次数:1
方法5:使用背包类Bag
List list = Arrays.asList("1", "2", "3", "1", "1", "2");
Bag bag = new HashBag(list);
System.out.println("元素出现次数:" + bag.getCount("1"));
输出:元素出现次数:3
仅供个人记录和参考,不喜勿喷。