java中map统计次数

1.案例:统计数组中出现数字的次数

上代码:

package com.ffyc.algorithm;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class stringcount {
    //map统计字符串出现的次数 的案例
    public void removeElement(int[] nums) {
        Map<Integer,Integer> map =new HashMap<>();
        for (int i=0;i<nums.length;i++){
            //一个个加进来put 如果map里有这个key了 次数+1  (key=数字,value=数字出现的次数)
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
            //map里面存在就put进来  次数为+1  map里面不存在就put进来  次数为0
        }
        //遍历输出map
        for (Integer key: map.keySet()){
            Integer value=map.get(key);
            System.out.println("数字:"+key+"出现次数为:"+value);
        }

    }

    public static void main(String[] args) {
        int[] nums= {0,1,2,2,3,3,0,4,2};
        stringcount stringcount=new stringcount();
        stringcount.removeElement(nums);
    }

}

2.运行结果:

 

 3.分析:

map.put(nums[i],map.getOrDefault(nums[i],0)+1)

一次次put进去

如果map中没有这个数字(key) 那次数(value)就是0, 如果map中有这个数字(key) 就在这个数字对应的次数(value)的原值上+1

Java统计集合中元素出现的次数,可以采用多种方式实现。以下是几种常用的方法: ### 使用 Java 8 的 Stream API Java 8 引入了 Stream API,可以通过 `Collectors.groupingBy` 和 `Collectors.counting` 来简洁地完成统计操作。该方法通过流处理将集合中的元素分组,并统计每组的数量。 ```java Map<String, Long> nameMap = nameLists.stream() .collect(Collectors.groupingBy(p -> p, Collectors.counting())); ``` 这种方式非常适合需要对整个集合中所有元素进行统计的场景,同时代码简洁且易于维护[^1]。 ### 自定义方法遍历统计 如果希望统计某个特定元素在集合中出现的次数,可以编写一个自定义方法,通过遍历集合并计数匹配的元素。 ```java private static int frequency(List<String> list, String string) { int count = 0; for (String s : list) { if (string.equals(s)) { count++; } } return count; } ``` 这种方法适合只需要统计某一个指定元素的情况,逻辑简单清晰,但无法一次性获取所有元素的统计结果[^2]。 ### 使用 Map 手动统计 还可以通过手动使用 `Map` 来记录每个元素的出现次数。遍历集合时,检查当前元素是否已经存在于 Map 中,并更新对应的计数值。 ```java Map<String, Integer> nameMap = new HashMap<>(); nameLists.forEach(name -> { Integer counts = nameMap.get(name); nameMap.put(name, counts == null ? 1 : ++counts); }); ``` 此方法在性能上表现良好,尤其是在处理较大的数据集时,因为其时间复杂度为线性,同时提供了较高的灵活性[^4]。 ### 其他基础实现 对于更基础的实现,也可以手动创建类来扩展集合的功能,例如继承 `ArrayList` 并添加统计功能的方法。虽然这种方式较为繁琐,但在某些特定需求下可能适用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值