随机选择来自Multiset

时间:2016-10-02 18:02:49

标签: java optimization multiset

我有一个带字符串到整数映射的散列图,我正在尝试从中选择一个随机条目,加权与每个映射关联的整数。我正在使用的代码生成所有条目的累积总和。但是,当您需要多次执行此操作并进行操作时,这令人难以置信地缓慢且效率低下。关于我应该怎么做的任何想法?

我的代码,非常需要优化:

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);
}

0 个答案:

没有答案