Design Authentication Manager

设计一个验证器, 要有添加, 更新和查看有多少未过期token的功能.

这题直接做吧…优化就是加了个删除过期token的…

class AuthenticationManager {
    Map<String, Integer> m = new HashMap<>();
    int ttl;
    public AuthenticationManager(int timeToLive) {
        ttl = timeToLive;
    }
    
    public void generate(String tokenId, int currentTime) {
        m.put(tokenId, currentTime + ttl);
    }
    
    public void renew(String tokenId, int currentTime) {
        if(!m.containsKey(tokenId) || m.get(tokenId) <= currentTime)
            return;
        m.remove(tokenId);
        generate(tokenId, currentTime);
    }
    
    public int countUnexpiredTokens(int currentTime) {
        int res = 0;
        Set<String> set = new HashSet<>();
        for(Map.Entry<String, Integer> e : m.entrySet()){
            if(e.getValue() > currentTime){
                res++;
            }else{
                set.add(e.getKey());
            }
        }
        for(String s : set){
            m.remove(s); //remove all expired token
        }
        return res;
    }
}

/**
 * Your AuthenticationManager object will be instantiated and called as such:
 * AuthenticationManager obj = new AuthenticationManager(timeToLive);
 * obj.generate(tokenId,currentTime);
 * obj.renew(tokenId,currentTime);
 * int param_3 = obj.countUnexpiredTokens(currentTime);
 */