我创建了以下结构,将唯一的 double 值映射到一对或多对整数:
@SuppressWarnings("boxing")
private static final HashMap<Double, Integer[][]> rules =
new HashMap<Double, Integer[][]>() {
private static final long serialVersionUID = 1L;
{
put(-0.6, new Integer[][] { { 1, 3 } });
put(-0.3, new Integer[][] { { 2, 2 } });
put(0.0, new Integer[][] { { 2, 4 }, { 3, 3 }, { 4, 2 } });
put(0.3, new Integer[][] { { 4, 4 } });
put(0.6, new Integer[][] { { 5, 3 } });
}
};
我能否重写它使其更简单 - 即不必处理警告(serialVersionUID、装箱),而且它是如此冗长?
最佳答案
首先应该为整数对使用一个类。或者这是一个巧合,所有数组都包含一堆对?
第二件事是,这些初始化数据可以从配置文件中读取。
编辑: 当我再次查看这段代码时,我意识到将 Doubles 作为 Map 中的键有点冒险。如果作为数学运算的结果生成 double ,则不清楚它们对于计算机是否相等(即使它们在数学意义上相等)。 float 在计算机中表示为近似值。您很可能希望将值与间隔(例如 0.0-0.3)相关联,而不是值本身。如果您始终使用与数组中的键相同的常量,您可能会避免麻烦。但在这种情况下,您也可以使用枚举,如果新程序员使用他计算的 double 值作为映射中的键,则不会遇到麻烦。
关于java - 丑陋的java数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/772876/