In Java ist die Berechnung des kartesischen Produkts von zwei oder mehr Mengen eine übliche Operation. Dabei wird ein neuer Satz generiert, der alle möglichen Kombinationen von Elementen aus den Eingabesätzen enthält.
Herkömmliche Ansätze mit verschachtelten Schleifen können beim Umgang mit einer beliebigen Anzahl von Sätzen umständlich werden. Ziehen Sie stattdessen einen rekursiven Ansatz in Betracht:
public static Set<Set<Object>> cartesianProduct(Set<?>... sets) { if (sets.length < 2) throw new IllegalArgumentException("Can't have a product of fewer than two sets (got " + sets.length + ")"); return _cartesianProduct(0, sets); } private static Set<Set<Object>> _cartesianProduct(int index, Set<?>... sets) { Set<Set<Object>> ret = new HashSet<>(); if (index == sets.length) { ret.add(new HashSet<>()); } else { for (Object obj : sets[index]) { for (Set<Object> set : _cartesianProduct(index + 1, sets)) { set.add(obj); ret.add(set); } } } return ret; }
Beachten Sie, dass diese rekursive Implementierung aufgrund von Einschränkungen im generischen Parametersystem von Java generische Typinformationen verliert. Um Typinformationen beizubehalten, sollten Sie erwägen, eine bestimmte Tupelklasse für die Anzahl der beteiligten Mengen zu definieren, z. B. Triple für drei Sätze. Dieser Ansatz ist jedoch für eine beliebige Anzahl von Mengen unpraktisch.
Das obige ist der detaillierte Inhalt vonWie kann man das kartesische Produkt mehrerer Mengen in Java effizient berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!