首页 > 解决方案 > 可导航地图:BigDecimal 或 NextKey 上的 lowerKey() 方法?

问题描述

假设我有一个倒序(降序)的树形图

TreeMap <BigDecimal, Integer> m = new TreeMap <>(Comparator.reverseOrder);

假设我有钥匙(BigDecimal)

(100.00, 75.50, 50.50)

如果我调用该方法(带有大十进制参数)

m.lowerKey(100.00)

它将输出空值。我想这与 BigDecimals 的比较有关,但是我怎样才能让它输出 75.50 呢?或者更简单地说,是否有可能在给定当前键的情况下获得下一个键,因为它是有序的?

一种可能的解决方案是使用 Double 作为键。但是我正在处理金钱,它们之间的转换听起来有点乏味。(另外我正在做一些算术,所以 double 容易出错)

注意:没有 lambdas / 函数构造和外部库!

标签: javatreehashmaptreemap

解决方案


我怎样才能让它输出 75.50 呢?

您将 TreeMap 定义为使用反向比较器,因此 100.00 低于 75.50。这意味着你需要在higherKey()这里使用。

给定当前键,是否有可能获得下一个键,因为它是有序的?

是的,但您需要注意订购。如果您提供了一个比较器,这将定义排序以及 TreeMap 认为更低或更高的值。另请注意,比较器对重复检测也有影响,即由于比较器而相等的任何键都将与 TreeMap 重复。


推荐阅读