我使用TreeMap
来保存产品的每日库存,如下所示:
NavigableMap<Integer, Integer> map = new TreeMap<>();
for (int i = 0; i < stocks.size(); i++) {
map.put(i+1, stocks.get(i));
}
我用日作为键,用股票作为值:
key | value
------------
1 | 5
2 | 6
3 | 8
4 | 4 <-- need to find lower of this value
5 | 9
6 | 10
7 | 8
8 | 3 <-- I need to obtain this
9 | 6
10 | 4
我正在尝试获取lower(4)的键,即8。如果有多个条目匹配,例如在lower(7)的情况下,我需要第一个条目的键,因此lower(7)应该生成2,而不是9。
然而,我不能检查值,需要使用键。那么,我该怎么做呢?
如果不可能,我是否还需要使用TreeSet
来降低?
1条答案
按热度按时间ctehm74n1#
你应该使用股票值作为键,使用日期作为值,这样就很容易用
lowerEntry(4).getValue()
来找到日期8。但是,可能会有重复的值,并且您希望找到最早的条目(即日期最小的条目),显然树Map不能有重复的键,因此我们通过只存储每个股票值的最早条目来解决这个问题。
注意,
put
的参数是相反的,for循环也是相反的,我们从列表的末尾开始,这样如果最早的股票值碰巧相同,就会覆盖最晚的股票值。那你就可以
得到8。