Di Jawa, mengira hasil Cartesan dua atau lebih set ialah operasi biasa. Ini melibatkan penjanaan set baharu yang mengandungi semua kemungkinan gabungan elemen daripada set input.
Pendekatan tradisional menggunakan gelung bersarang boleh menjadi menyusahkan apabila berurusan dengan bilangan set yang sewenang-wenangnya. Sebaliknya, pertimbangkan pendekatan rekursif:
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; }
Perhatikan bahawa pelaksanaan rekursif ini kehilangan maklumat jenis generik disebabkan oleh pengehadan dalam sistem parameter generik Java. Untuk mengekalkan maklumat jenis, pertimbangkan untuk menentukan kelas tuple tertentu untuk bilangan set yang terlibat, seperti Triple untuk tiga set. Walau bagaimanapun, pendekatan ini tidak praktikal untuk bilangan set yang sembarangan.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Produk Cartesan Berbilang Set dengan Cekap di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!