Bounded LRU cache backed by a Hash
Crystal
class LRUCache(K, V)
def initialize(@capacity : Int32)
raise ArgumentError.new("capacity must be >= 1") if @capacity < 1
@data = {} of K => V
end
def get(key : K) : V?
return nil unless @data.has_key?(key)
value = @data[key]
@data.delete(key)
@data[key] = value
value
end
def put(key : K, value : V) : Nil
@data.delete(key)
@data.shift if @data.size >= @capacity
@data[key] = value
end
end