Interseção entre conjuntos

6 respostas
jeovane.reges

Olá a todos, boa tarde.
Minha dúvida é a seguinte, suponham que eu tenha dois conjuntos chamados A e B.
A possui um conjunto de classes ordenadas e B pode conter um conjunto de classes desordenadas, desde de que essas classes também estejam em A
O que eu gostaria era de fazer uma interseção entre A e B e adicionar as classes em comum entre eles num conjunto C.
No entanto, as classes adicionadas em C deveriam ter a mesma ordem das classes de A.

Por exemplo, suponha o seguinte abaixo.
// Conjunto A
Set<String> A = new LinkedHashSet<String>();
A.add("João")
A.add("Maria")
A.add("Pedro")
A.add("Francisco")

// Conjunto B
Set<String> B = new LinkedHashSet<String>();
B.add("Pedro");
B.add("João");
No meu conjunto C gostaria de ter {João, Pedro} respectivamente nessa ordem. Tentei da seguinte maneira abaixo, porém não obtive sucesso.
// Conjunto C
Set<String> C = new LinkedHashSet<String>();
if (A.containsAll(B)) {
    C.addAll(B);
}
Alguém saberia me dizer o que devo fazer pra atingir esse meu objetivo? Obrigado.

6 Respostas

lucaskatayama

itera no conjunto A… verifica se o elemento esta em B… se sim adiciona em C…

jeovane.reges

Uma maneira na qual conseguir foi a seguinte:

for (String a : A){ for (String b : B){ if (a.contains(b)){ C.add(a); } } }
Apesar de funcionar o algoritmo fica com complexidade n²
Se tiver algo em java linear seria muito melhor.

lucaskatayama

nao entendi porque voce colocou dois loops…

nao eh soh verificar se b contem string a?? ou voce tem que verificar se, por exemplo, string joao esta em alguma parte das string do conjunto b?

jeovane.reges

Tenho que adicionar em C os elementos que estão em B, no entanto, na mesma ordem em que eles aparecem em A.

lucaskatayama

entao acho que nao precisa da segunda iteracao

para todos os elementos de a
se o conjunto b contem a
adiciona c

jeovane.reges

Teria como postar o código da sua ideia apresentada?
Ficaria mais fácil pra eu entender o que você estar dizendo :slight_smile:

Criado 10 de fevereiro de 2013
Ultima resposta 10 de fev. de 2013
Respostas 6
Participantes 2