优秀的编程知识分享平台

网站首页 > 技术文章 正文

100个Java工具类之68:统计list中某元素出现的次数的五种方法

nanyue 2025-02-21 14:35:15 技术文章 2 ℃

方法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


仅供个人记录和参考,不喜勿喷。

最近发表
标签列表