私は、冗談を検索するタイトなループを持っています。リストprimeFactors
。そのn番目の要素には、nの素数分解のソートされたリストが含まれています。 c
とd
は有望に見えるが、それは私の再利用可能なprimeFactors
オブジェクトを変更しますcheckIfPrimes
2つのソートされたリストに同じ要素のJavaが含まれているかどうかを調べる効率的な方法。
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))
を使用してcoprimesある場合、私はチェックしています。
新しいオブジェクトの作成は比較的遅いです。このステップをスピードアップする方法はありますか?リストがソートされているという事実を何とか利用することはできますか?代わりに配列を使うべきですか?
Javaのどのバージョンですか? 8+以上の場合は、パフォーマンスに関連するいくつかの選択肢があります – JoeG
@JoeGはい、Java8です。 – sixtytrees
['Collections.disjoint()'](https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#disjoint(java.util。コレクション、%20java.util.Collection))。 – shmosel