要对大量的计算进行建模,我需要将速度与代码编写者和阅读者的便利结合起来。
第一个重要部分是计算和存储按出生年份,性别,年龄等索引的数据。
例如,我的出生年份范围是1900年至2050年。由于我无法声明1950年至2050年的非零索引数组,因此我想封装从[0..150]到[1900 .. 2050]。显然,它更不容易出错,更容易读写类似
的代码valueArray.setValue(1950, someValue);
比
valueArray[1950 - 1900] = someValue;
如果必须使用多个不同的数组范围执行数百次。
速度对于我的任务至关重要。因此,我想知道有没有一种比下面显示的明显更快的方法更好。是否有完全不同的方法来解决您要采取的问题?
public class OffsetArray {
private int min;
private int max;
private double initValue;
private double[] values;
public OffsetArray( int min, int max, double initValue ) {
this.min = min;
this.max = max;
this.values = new double[max-min+1];
this.initValue = initValue;
this.init();
}
private void init() {
for ( int i = 0; i<max-min+1;i++) {
values[i] = this.initValue;
}
}
public double getValue(int index) {
return values[index-min];
}
public void setValue(int index, double value ) {
this.values[index-min] = value;
}
public int getMin() {
return min;
}
public int getMax() {
return max;
}
修改后的其他要求:
我需要这类具有多个维度并且范围以负数开头的数组,即[-50..50]。
答案 0 :(得分:0)
为什么不使用HashMap?它们非常有效,可以让您基于密钥进行“索引”。
Map<String, List<Integer>> map = new HashMap<>();
map.computeIfAbsent("1900-2000", k -> new ArrayList<>()).add(10);
map.computeIfAbsent("1900-2000", k -> new ArrayList<>()).add(20);
map.computeIfAbsent("1900-2000", k -> new ArrayList<>()).add(30);
System.out.println(map.get("1900-2000"));
您可能有一些方法可以根据所讨论的值(对象)的状态来创建密钥。