浮动作为地图中的关键

时间:2015-08-19 15:29:02

标签: java

鉴于{Price, Quantity}对的集合,我需要以相同的价格汇总所有数量。实现它的最简单方法是什么?

肮脏的,将使用Hashmap实施解决方案,其中键是价格和价值是聚合数量。但是,据我所知,Float不是Hashmap的安全密钥。所以这个解决方案容易出错。

什么是解决此问题的推荐替代方案?

2 个答案:

答案 0 :(得分:8)

您可以使用BigDecimal作为键。这将是哈希码安全。

您必须初始化值,使它们具有相同的比例,例如:

BigDecimal key = new BigDecimal(Double.toString(price)).setScale(2);

答案 1 :(得分:0)

如果所有价格都有固定的十进制大小(例如2位数),您只需使用Long(以美分为单位)作为地图关键字。

使用BigDecimal是一个糟糕的选择,因为它可能导致罕见且难以发现的错误 - 只有两个BigDecimal具有相同的值并且相同时才相等精度(因此2.0不等于2.00也不2 - 所有三个都将成为地图中的不同键。)