Maison >Java >javaDidacticiel >Comment calculer efficacement le produit cartésien de plusieurs ensembles en Java ?
En Java, calculer le produit cartésien de deux ensembles ou plus est une opération courante. Cela implique de générer un nouvel ensemble contenant toutes les combinaisons possibles d'éléments des ensembles d'entrée.
Les approches traditionnelles utilisant des boucles imbriquées peuvent devenir lourdes lorsqu'il s'agit de traiter un nombre arbitraire d'ensembles. Envisagez plutôt une approche récursive :
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; }
Notez que cette implémentation récursive perd les informations de type générique en raison des limitations du système de paramètres génériques de Java. Pour conserver les informations de type, envisagez de définir une classe de tuple spécifique pour le nombre d'ensembles impliqués, telle que Triple pour trois séries. Cependant, cette approche n'est pas pratique pour un nombre arbitraire d'ensembles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!