Tengo dos listas (no listas de Java, puede decir dos columnas)
Por ejemplo
**List 1** **Lists 2**
milan hafil
dingo iga
iga dingo
elpha binga
hafil mike
meat dingo
milan
elpha
meat
iga
neeta.peeta
Me gustaría un método que devuelva cuántos elementos son iguales. Para este ejemplo, debería ser 3 y debería devolverme valores similares de la lista y valores diferentes también.
¿Debo usar hashmap si es así, entonces qué método para obtener mi resultado?
Por favor ayuda
PD: No es una tarea de la escuela :) Así que si me guias será suficiente
java
list
comparison
hashmap
user238384
fuente
fuente
Respuestas:
EDITAR
Aquí hay dos versiones. Uno usando
ArrayList
y otro usandoHashSet
Compárelos y cree su propia versión a partir de esto, hasta que obtenga lo que necesita.
Esto debería ser suficiente para cubrir:
parte de tu pregunta.
continuando con la respuesta original:
Puede usar ay
java.util.Collection
/ ojava.util.ArrayList
para eso.El método keepAll hace lo siguiente:
ver esta muestra:
EDITAR
Para la segunda parte (valores similares) puede utilizar el método removeAll :
Esta segunda versión también le da valores similares y maneja repetidos (descartándolos).
Esta vez,
Collection
podría ser a enSet
lugar de aList
(la diferencia es que el conjunto no permite valores repetidos)Salida:
Si no hace exactamente lo que necesita, le da un buen comienzo para que pueda manejar desde aquí.
Pregunta para el lector: ¿Cómo incluiría todos los valores repetidos?
fuente
listOne
, ¡pero +1 de todos modos!Puede probar
intersection()
ysubtract()
métodos deCollectionUtils
.intersection()
El método le brinda una colección que contiene elementos comunes y elsubtract()
método le brinda todos los poco comunes.También deben cuidar elementos similares
fuente
¿Son estas realmente listas (ordenadas, con duplicados) o son conjuntos (desordenadas, sin duplicados)?
Porque si es lo último, entonces puede usar, digamos, ay
java.util.HashSet<E>
hacer esto en el tiempo lineal esperado usando el convenienteretainAll
.fuente
Usando java 8 removeIf
fuente
Si está buscando una forma práctica de probar la igualdad de dos colecciones, puede usar
org.apache.commons.collections.CollectionUtils.isEqualCollection
, que compara dos colecciones independientemente del orden.fuente
De todos los enfoques, encuentro que usar
org.apache.commons.collections.CollectionUtils#isEqualCollection
es el mejor enfoque. Estas son las razones:Si no es posible tener
apache.commons.collections
como dependencia, recomendaría implementar el algoritmo que sigue para verificar la igualdad de la lista debido a su eficiencia.fuente
Solución simple :-
Salida: -
fuente
Asumiendo
hash1
yhash2
fuente
Encontré un ejemplo muy básico de comparación de listas en Comparación de listas. Este ejemplo verifica primero el tamaño y luego verifica la disponibilidad del elemento particular de una lista en otra.
fuente
fuente
? true :false
es necesaria en su fragmento?