Interseção entre conjuntos

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.

[code]// Conjunto A
Set A = new LinkedHashSet();
A.add(“João”)
A.add(“Maria”)
A.add(“Pedro”)
A.add(“Francisco”)

// Conjunto B
Set B = new LinkedHashSet();
B.add(“Pedro”);
B.add(“João”);[/code]
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.

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

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.

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?

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

entao acho que nao precisa da segunda iteracao

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

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