我有一个带字符串到整数映射的散列图,我正在尝试从中选择一个随机条目,加权与每个映射关联的整数。我正在使用的代码生成所有条目的累积总和。但是,当您需要多次执行此操作并进行操作时,这令人难以置信地缓慢且效率低下。关于我应该怎么做的任何想法?
我的代码,非常需要优化:
public String getRandom(Random rnd) {
ArrayList<Entry<String, MutableInteger>> entries = new ArrayList<>(results.entrySet());
ArrayList<Long> ints = new ArrayList<>();
ArrayList<String> vals = new ArrayList<>();
long cumulative = -1;
for(Entry<String, MutableInteger> e : entries) {
ints.add(cumulative += e.getValue().get());
vals.add(e.getKey());
}
long l = Math.abs(rnd.nextLong()) % (cumulative == 0 ? 1 : cumulative);
int index = Collections.binarySearch(ints, l);
index = (index >= 0) ? index : -index-1;
return vals.get(index);
}