Roda Abreviada

Pessoal o assunto pode ser batido na net, mais estou em busca de como construir rodas abreviadas e ter uma melhor compreensão sobre o assunto já que se trata de analise combinatória, gostaria da opinião de vocês, como posso fazer para comparar os dois vectores ou se quiserem usar arrayList ou até map. porque a medida que quantidade de numeros aumenta a complexidade tambem ou não, talvez o problema esteja quantidade bit, seja o problema.

Para fazer uma cobertura para garantir 2 acertos iguais.

Eu procurei algo semelhante na Internet não achei, se tem algum “calculo” para se chegar ao “resumo” ou é lógica, Alguém poderia me da uma explicação.

Se de para usar apenas lista MAT-1, assim já não precisaria criar lista MAT-2.

fiz exemplo simples para melhor compreensão.

qualquer conjunto de 2 está no resumo.

MAT-1 MAT-2   RESUMO
1;2;3  1;2           1 2 3
1;2;4  1;3           1 2 4
1;2;5  1;4           1 2 5
1;3;4  1;5           3 4 5
1;3;5  2;3
1;4;5  2;4
2;3;4  2;5
2;3;5  3;4
2;4;5  3;5
3;4;5  4;5
package matriz;

import java.util.Scanner;

public class Gerar {
    
    public static void gerar(int num){
        int total = 0;
        int[] vetA = new int[3];
      
        for (int n1 = 1; n1 <= num; n1++) {
            vetA[0] = n1;
        for (int n2 = n1 + 1; n2 <= num; n2++) {
            vetA[1] = n2;
        for (int n3 = n2 + 1; n3 <= num; n3++) {
            vetA[2] = n3;           
            
        System.out.println(" " + vetA[0] + " " + vetA[1] + " " + vetA[2]);
        total++;
        }
        }
        }
        System.out.println("TOTAL DE 3: "+ total);        
    }    

    public static void cobertura2(int num) {
        int total=0;
        int[] vetB = new int[2];
        
        for (int n1 = 1; n1 <= num; n1++) {
            vetB[0] = n1;
            for (int n2 = n1 + 1;n2 <= num; n2++) {
                vetB[1] = n2;                
                System.out.println(" " + vetB[0] + " " + vetB[1]);
                total++;
            }
        }
        System.out.println("TOTAL DE 2: "+ total);         
    }    
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);        
        int[] vetB = new int[3];
        int[] vetA = new int[2];
        int num = 0;
        System.out.println("Digite numero Comb:");
        num = scan.nextInt();       
        gerar(num);
        cobertura2(num);
                
    }
}