我有一个Long of String和Map - Map,它将我的时间戳作为键和值存储为我的数据。
Map<Long, String> eventTimestampHolder = new HashMap<Long, String>();
现在,我希望通过查看作为密钥一部分的时间戳,然后继续在字符串列表中添加这些数据,从上面的地图中获取100个最新数据。通常填充列表中的100个最新数据。
最好的方法是什么?我可以在这里使用TreeMap,它会在时间戳上正确地对我的键进行排序吗?
一般来说,我的时间戳看起来像这样 - 1417686422238
并且它将以毫秒为单位
答案 0 :(得分:1)
如果您的意思是最近添加的“最近”,那么您可以尝试LinkedHashMap
来保持插入顺序。然后你可以迭代前100个项目。
您可以像这样迭代地图:
for(Long key : eventTimestampHolder.keySet()) {
String value = eventTimestampHolder.get(key);
}
答案 1 :(得分:0)
对于任何可以排序的密钥,您应该使用SortedMap
(除非有其他要求使其不合适)。 TreeMap
是有序地图。由于您需要最新的 k 条目,因此首先需要最大键。这可以通过遍历地图descendingKeySet
中的 k 第一个键来完成,如下所示,Java-8中的单行:
eventTimestampHolder.descendingKeySet().stream().limit(k); // in your case, k = 100
如果您不仅需要键,还需要值,那么您可以找到 k '键,然后使用
// the 2nd arg is a boolean indicating whether the k'th entry will be included or not
eventTimestampHolder.tailMap(kthTimestamp, true);
使用tailMap
时要记住的一件事是它将由原始eventTimestampHolder
地图支持,对此的任何更改都将反映在返回的尾部地图中。