Eu tenho duas listas (não listas java, você pode dizer duas colunas)
Por exemplo
**List 1** **Lists 2**
milan hafil
dingo iga
iga dingo
elpha binga
hafil mike
meat dingo
milan
elpha
meat
iga
neeta.peeta
Eu gostaria de um método que retornasse quantos elementos são iguais. Para este exemplo, deve ser 3 e deve retornar valores semelhantes de lista e também valores diferentes.
Devo usar hashmap se sim, qual método para obter meu resultado?
Por favor ajude
PS: Não é um trabalho escolar :) Então, se você apenas me orientar, será o suficiente
java
list
comparison
hashmap
user238384
fonte
fonte
Respostas:
EDITAR
Aqui estão duas versões. Um usando
ArrayList
e outro usandoHashSet
Compare-os e crie sua própria versão a partir disso, até obter o que precisa.
Isso deve ser o suficiente para cobrir:
parte da sua pergunta.
continuando com a resposta original:
Você pode usar um
java.util.Collection
e / oujava.util.ArrayList
para isso.O método retémAll faz o seguinte:
veja este exemplo:
EDITAR
Para a segunda parte (valores semelhantes), você pode usar o método removeAll :
Esta segunda versão fornece também os valores semelhantes e alças repetidas (descartando-os).
Desta vez, o
Collection
poderia ser um emSet
vez de umList
(a diferença é que o conjunto não permite valores repetidos)Resultado:
Se não fizer exatamente o que você precisa, é um bom começo para que você possa prosseguir a partir daqui.
Pergunta para o leitor: Como você incluiria todos os valores repetidos?
fonte
listOne
, mas +1 de qualquer maneira!Você pode tentar
intersection()
esubtract()
métodos deCollectionUtils
.intersection()
método fornece uma coleção contendo elementos comuns e osubtract()
método fornece todos os elementos incomuns.Eles também devem cuidar de elementos semelhantes
fonte
Essas listas são realmente (ordenadas, com duplicatas) ou são conjuntos (não ordenadas, sem duplicatas)?
Porque se for o último, então você pode usar, digamos, a
java.util.HashSet<E>
e fazer isso no tempo linear esperado usando o convenienteretainAll
.fonte
Usando java 8 removeIf
fonte
Se você está procurando uma maneira prática de testar a igualdade de duas coleções, pode usar o
org.apache.commons.collections.CollectionUtils.isEqualCollection
, que compara duas coleções independentemente da ordem.fonte
De todas as abordagens, acho que usar
org.apache.commons.collections.CollectionUtils#isEqualCollection
é a melhor. Aqui estão as razões -Se não for possível ter
apache.commons.collections
como dependência, recomendo implementar o algoritmo que segue para verificar a igualdade da lista devido à sua eficiência.fonte
Solução simples: -
Resultado :-
fonte
Assumindo
hash1
ehash2
fonte
Encontrei um exemplo muito básico de comparação de lista em Comparação de lista. Este exemplo verifica o tamanho primeiro e, em seguida, verifica a disponibilidade de um elemento específico de uma lista em outra.
fonte
fonte
? true :false
é necessário em seu trecho?