Mam ciasną pętlę, która wyszukuje coprimes. Lista primeFactors
. Jej n-ty element zawiera posortowaną listę pierwotnego rozkładu n. Jestem sprawdzenie czy c
i d
są coprimes użyciu checkIfPrimes
Skuteczny sposób sprawdzenia, czy dwie posortowane listy zawierają ten sam element 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))
wygląda obiecująco, ale to zmienia mój wielokrotnego użytku primeFactors
obiekt.
Tworzenie nowego obiektu odbywa się stosunkowo wolno. Czy istnieje sposób na przyspieszenie tego kroku? Czy mogę w jakiś sposób wykorzystać fakt, że listy są sortowane? Czy zamiast tego powinienem używać tablic?
Jaką wersję Java? Jeśli masz 8+, masz sporo alternatyw związanych z wydajnością. – JoeG
@JoeG Tak, to jest Java8. – sixtytrees
Wygląda na to, że szukasz ['Collections.disjoint()'] (https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#disjoint (java.util. Kolekcja,% 20java.util.Collection)). – shmosel