我有一个搜索余数的紧密循环。一个清单primeFactors
。它的第n个元素包含n的素数分解的排序列表。我正在检查是否c
和d
互素checkIfPrimes
boolean checkIfPrimes(int c, int d, List<List<Integer>> primeFactors) {
List<Integer> common = new ArrayList<>(primeFactors.get(d)); //slow
common.retainAll(primeFactors.get(c));
return (common.isEmpty());
}
primeFactors.get(d).retainAll(primeFactors.get(c))
看起来很有希望,但是它将改变我的可重用primeFactors
对象。
创建一个新对象相对较慢。有没有办法加快这一步骤?我可以以某种方式利用列表已排序的事实吗?我应该改用数组吗?
设置操作应比数组操作快。只是为了踢球,请考虑尝试一下,并将性能与流性能进行比较:
final Set<Integer> commonSet;
final Set<Integer> cSet = new HashSet<Integer>();
final Set<Integer> dSet = new HashSet<Integer>();
cSet.addAll(primeFactors.get(c));
dSet.addAll(primeFactors.get(d));
commonSet = dSet.retainAll(cSet);
return (commonSet.isEmpty());
另外,考虑使用List<Set<Integer>> primeFactors
而不是,List<List<Integer>> primeFactors
因为我怀疑您实际上没有一个主要因素列表,但实际上有一组主要因素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句