-2

嘿,我的项目上的发布测试有这个代码超时,因为它只需要与唯一对象数量成比例的时间,我怎样才能减少时间?

给定一个随机数生成器,根据 Bag 中对象的分布情况从 Bag 中随机选择一个元素(例如,如果一个 Bag 包含 7 个 a 和 3 个 b,那么 70% 的时间选择应该返回一个 a,30%它应该返回 a b 的时间。

此操作所花费的时间与 Bag 中唯一对象的数量成正比,但不会更多。

此操作不应影响 Bag。@param r 随机数生成器 @return 随机选择的元素

public T choose(Random r) {
    ArrayList<T> keyArrayList = new ArrayList<T>();
    int index = 0;
    Iterator<T> it = denseBagMap.keySet().iterator();
    while (it.hasNext()){
         T current = it.next();
         while (index < denseBagMap.get(current)){
             keyArrayList.add(current);
             index++;
         }
         index = 0;
    }
    return keyArrayList.get(r.nextInt(keyArrayList.size()));
}
4

1 回答 1

0

如果这是一个 JUnit(即使它看起来不像,您可能希望将它变成一个),您可能希望为测试定义一个超时并减少它的随机性。您还可以使用参数化测试,这将帮助您使用不同的输入值运行测试,但我相信对于所有不同的参数集,超时将是相同的。

于 2013-04-04T00:54:29.347 回答