11class LogSystem {
2- private Map <String , Integer > delimiterMap ;
32 private TreeMap <String , List <Integer >> logs ;
3+ private Map <String , Integer > delimeters ;
4+ private static final String min = "2000:01:01:00:00:00" ;
5+ private static final String max = "2017:12:31:23:59:59" ;
46
57 public LogSystem () {
6- delimiterMap = new HashMap <>();
78 logs = new TreeMap <>();
8-
9- delimiterMap .put ("Year" , 4 );
10- delimiterMap .put ("Month" , 7 );
11- delimiterMap .put ("Day" , 10 );
12- delimiterMap .put ("Hour" , 13 );
13- delimiterMap .put ("Minute" , 16 );
14- delimiterMap .put ("Second" , 19 );
9+ delimeters = new HashMap <>();
10+
11+ delimeters .put ("Year" , 4 );
12+ delimeters .put ("Month" , 7 );
13+ delimeters .put ("Day" , 10 );
14+ delimeters .put ("Hour" , 13 );
15+ delimeters .put ("Minute" , 16 );
16+ delimeters .put ("Second" , 19 );
1517 }
1618
1719 public void put (int id , String timestamp ) {
@@ -22,19 +24,14 @@ public void put(int id, String timestamp) {
2224 public List <Integer > retrieve (String start , String end , String granularity ) {
2325 List <Integer > result = new ArrayList <>();
2426
25- int idx = delimiterMap .get (granularity );
26-
27- String searchStart = start .substring (0 , idx );
28- String searchEnd = end .substring (0 , idx );
29-
30- for (String timestamp : logs .keySet ()) {
31- String tSubstring = timestamp .substring (0 , idx );
27+ int idx = delimeters .get (granularity );
28+ String searchStart = start .substring (0 , idx ) + min .substring (idx ),
29+ searchEnd = end .substring (0 , idx ) + max .substring (idx );
3230
33- if (tSubstring .compareTo (searchStart ) >= 0 && tSubstring .compareTo (searchEnd ) <= 0 ) {
34- result .addAll (logs .get (timestamp ));
35- }
31+ for (String timestamp : logs .subMap (searchStart , true , searchEnd , true ).keySet ()) {
32+ result .addAll (logs .get (timestamp ));
3633 }
3734
3835 return result ;
3936 }
40- }
37+ }
0 commit comments