Java中的高效计数器全收录

您可能经常需要计数器来了解数据库或文本文件中某些内容(例如单词)的出现频率。通过使用Java中的HashMap可以轻松实现计数器。本文比较了实现计数器的不同方法。最后,将得出一个有效的结论。

  1. 天真版计数器
    天真版的,它可以通过以下方式实现:
    String s = “one two three two three three”;String[] sArr = s.split(" ");
    //naive approach
    HashMap<String, Integer> counter = new HashMap<String, Integer>();
    for (String a : sArr) {
    if (counter.containsKey(a)) {
    int oldValue = counter.get(a);
    counter.put(a, oldValue + 1);
    } else {
    counter.put(a, 1);
    }}
    在每个循环中,您检查密钥是否存在。如果是这样,则将旧值增加1;否则,将其设置为1。此方法简单明了,但这不是最有效的方法。由于以下原因,该方法的效率较低:
    当一个键已经存在时,containsKey(),get()被调用两次。这意味着搜索地图两次。
    由于Integer是不可变的,因此每个循环将创建一个新循环以增加旧值

  2. 更好的counter
    自然地,我们想要一个可变的整数以避免创建许多Integer对象。可变整数类可以定义如下:
    class MutableInteger {

    private int val;

    public MutableInteger(int val) {
    this.val = val;
    }

    public int get() {
    return val;
    }

    public void set(int val) {
    this.val = val;
    }

    //used to print value convinently
    public String toString(){
    return Integer.toString(val);
    }}
    并将计数器改进并更改为以下内容:
    HashMap<String,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值