【发布时间】:2019-01-25 22:48:09
【问题描述】:
我正在处理银行应用程序的编码挑战,我需要在过去 60 秒内获取交易数量。
为此,我使用java.sql.Timestamp 作为map 的键,如下所示:
Map<Timestamp, List<Transaction>> transactions1 = new HashMap<>();
这里的值是当时完成的交易列表。
我无法使用 DB。我知道如何遍历地图并获取数据,但为此我需要遍历整个 map,这将非常耗时。
1) 我的问题是
Map是解决这个问题的正确数据结构吗?2) 如果是这样,我该如何减少它(可能是
NavigableMap)?
我要求的不是编码解决方案,而是我应该使用的正确设计/数据结构。
【问题讨论】:
-
为什么不使用纪元时间戳作为键
1534698909以便根据键对地图进行排序并获取值 -
我会说
Timestamp是错误的类。一,它已经过时了,二,它是为与 SQL 数据库一起使用而设计的。考虑Instant或java.time, the modern Java date and time API 的其他类。 -
如果您只需要交易数量,存储每次的数量就足够了(您不需要实际交易的列表)。我会考虑一个时间和数字对的列表,保持列表按时间排序。然后在最后几分钟内找到最早的计数并将该点的数字相加就足够了。不过,我们对您的要求知之甚少,无法判断这是否是一个好的解决方案,这就是为什么我投票决定以不清楚的方式结束您的问题。