我开始了一个新的信用管理项目,我已经到了必须处理货币兑换的地步。(例如欧元 -> 美元)所以我进行了一些头脑风暴并得到了这个:
货币是抽象的,每一种新货币都是一个接口的实现
建立了一个汇率类,它存储了一个数组列表 pair<pair,double>(我在想像欧元、美元、1.14 这样的东西 -> 欧元兑美元的汇率是 1.14)并且有一些功能,比如:货币汇率存储,正确汇率的查找器(它是一个函数,它获取当前货币和新货币作为参数,并在列表中执行搜索,返回适当的货币)和一个确定货币对指数的效用函数。
现在,我正在考虑性能。我相信我的设计包含一些冗余:如果我有欧元对美元,我必须有美元对欧元。此外,对于更多条目(假设为 100k),我的存储(pair<pair,double> 的数组列表)的效率如何?我有哪些替代方案?我知道有很多数据结构,但我真的不知道该选择什么。
现在,对于代码:
转化率等级:
package currency;
import javafx.util.Pair;
import loggers.ILogger;
import java.util.ArrayList;
public class ConversionRates implements IConversionRate {
private ArrayList<Pair<Pair<String, String>, Double>> conversionRates;
private ILogger log;
public ConversionRates(ArrayList<Pair<Pair<String, String>, Double>> conversionRates, ILogger log) {
this.conversionRates = conversionRates;
this.log = log;
}
@Override
public double find(ICurrency firstCurrency, ICurrency secondCurrency) {
log.add("Performing rate identification");
String first = firstCurrency.getId();
String second = secondCurrency.getId();
int index = searchPairs(first, second);
Pair<Pair<String, String>, Double> selectedPair = conversionRates.get(index);
double rate = selectedPair.getValue();
return rate;
}
private int searchPairs(String first, String second) {
Pair<String, String> pairContainingRate = new Pair<>(first, second);
for (int index = 0; index < conversionRates.size(); index++) {
if (conversionRates.get(index).getKey().equals(pairContainingRate)) {
log.add("Successfully found target " + first + "/" + second);
return index;
}
}
log.add("Failed to find target " + first + "/" + second);
return -1;
}
@Override
public void add(Pair<Pair<String, String>, Double> newRate) {
log.add("Added new rate " + newRate);
conversionRates.add(newRate);
}
蝴蝶不菲
qq_遁去的一_1
相关分类