Peço desculpas se houver uma pergunta semelhante feita antes, mas apenas uma que eu encontrei foi Como encontrar padrões semelhantes em listas / matrizes de cadeias de caracteres
O problema é simples. Existem duas grandes matrizes de cadeias de caracteres. E eu preciso descobrir a semelhança. Semelhança é simplesmente o número de cadeias semelhantes.
String [] A = {"A", "B", "C", "D"}; String [] B = {"X", "Y", "B", "D"};
Similaridade entre essas duas listas é 2.
A solução óbvia é o caminho da força bruta. Apenas compare cada palavra com todas as outras palavras. Mas qual é a próxima melhor solução?
Está usando um mapa de hash uma solução eficaz? Percorra uma lista e coloque cada palavra em um mapa de hash. Em seguida, veja quantas das segundas chaves da lista estão contidas no mapa de hash.
Essa é a maneira geralmente aceita de executar esse tipo de problema? Parece que existem soluções baseadas em árvore, mas elas não parecem simples.
Obrigado.
Respostas:
2 para resposta № 1Use um HashSet
. Ele fornece funcionalidade para fazer interseções.
list1 // your 1st list
list2 // your second list
Set<Type> s1 = new HashSet<Type>();
s1.addAll(list1); // add your values from list 1
Set<Type> s2 = new HashSet<Type>();
s2.addAll(list2); // add your values from list 2
Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
System.out.println(intersection.size());
Você pode consultar o Set
interface em Os tutoriais de Java
2 para resposta № 2
Você pode fazer backup de cada matriz em Set e, em seguida, encontrar a interseção:
Set<String> firstSet = new HashSet<String>(Arrays.asList(firstArray));
Set<String> secondSet = new HashSet<String>(Arrays.asList(secondArray));
firstSet.retainAll(secondSet);
System.out.println(firstSet.size());