java 如何在TreeMap中获得较低的值?

lymgl2op  于 2022-12-25  发布在  Java
关注(0)|答案(1)|浏览(143)

我使用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来降低?

ctehm74n

ctehm74n1#

你应该使用股票值作为键,使用日期作为值,这样就很容易用lowerEntry(4).getValue()来找到日期8。
但是,可能会有重复的值,并且您希望找到最早的条目(即日期最小的条目),显然树Map不能有重复的键,因此我们通过只存储每个股票值的最早条目来解决这个问题。

NavigableMap<Integer, Integer> map = new TreeMap<>();
for (int i = stocks.size() - 1; i >= 0; i--) {
    map.put(stocks.get(i), i+1);
}

注意,put的参数是相反的,for循环也是相反的,我们从列表的末尾开始,这样如果最早的股票值碰巧相同,就会覆盖最晚的股票值。
那你就可以

map.lowerEntry(4).getValue()

得到8。

相关问题