一、描述
- 设计一个TimeMap,基于key value的
- 支持两类操作set(string key, string value, int timestamp),get(string key, int timestamp)
- 在get(string key, int timestamp)方法中,返回一个值,满足set(string key, int timestamp_prev) timestamp_prev <= timestamp,其中timestamp_prev为最大的timestamp_prev。
二、思路
要借助TreeMap。
TreeMap大概描述
- 根据key排序的map
- 有firstkey()接口,就是排在第一的key
- 有floorEntry()接口,其实就是largerest key。
三、code
1 package algorithm; 2 3 import java.util.HashMap; 4 import java.util.TreeMap; 5 6 /** 7 * Created by adrian.wu on 2019/2/18. 8 */ 9 public class TimeMap { 10 private HashMap<String, TreeMap<Integer, String>> map = new HashMap<>(); 11 12 private static final String ES = ""; 13 14 public void set(String key, String value, int ts) { 15 TreeMap<Integer, String> tm = map.get(key) == null ? new TreeMap<>() : map.get(key); 16 tm.put(ts, value); 17 map.put(key, tm); 18 } 19 20 public String get(String key, int ts){ 21 if(map.get(key) == null) return ES; 22 TreeMap<Integer, String> tm = new TreeMap<>(); 23 if (tm.firstKey() > ts) return ES; 24 return tm.floorEntry(ts).getValue(); 25 } 26 }