Java问题,测试它超时,需要修复我的方法-选择

Java问题,测试它超时,需要修复我的方法-选择,java,Java,嘿,我的项目上的发布测试有这个代码超时,因为它只需要与唯一对象的数量成比例的时间,我如何缩短时间 给定一个随机数生成器,从包中随机选择一个元素 根据行李中物品的分布情况,例如,如果行李 包含7个a和3个b,则70%的时间choose应返回a, 30%的时间它应该返回b 此操作所需的时间与唯一对象的数量成比例 在袋子里,但不要更多 此操作不应影响行李。 @参数r 随机数发生器 @返回随机选择的元素 public T choose(Random r) { ArrayList<T>

嘿,我的项目上的发布测试有这个代码超时,因为它只需要与唯一对象的数量成比例的时间,我如何缩短时间

给定一个随机数生成器,从包中随机选择一个元素 根据行李中物品的分布情况,例如,如果行李 包含7个a和3个b,则70%的时间choose应返回a, 30%的时间它应该返回b

此操作所需的时间与唯一对象的数量成比例 在袋子里,但不要更多

此操作不应影响行李。 @参数r 随机数发生器 @返回随机选择的元素

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

如果这是一个JUnit,即使它看起来不像JUnit,您可能希望将其转换为JUnit,您可能希望为测试定义一个JUnit,并减少其随机性。您也可以使用一个测试来帮助您使用不同的输入值运行测试,尽管我相信对于所有不同的参数集,超时时间都是相同的。

您的问题是?又是什么问题?这是问题吗?ifMath.random不是答案,但是您可以为T current执行:denseBagMap.keySet,而不是使用迭代器,除非您不支持Java 7。它干净多了。