Es posible que desee ver en este artículo para obtener más información: 012
http://download-llnw.oracle.com/javase/tutorial/collections/interfaces/set.html
Como se ha mencionado, removeAll()
está hecho para esto, pero tendrá que hacerlo dos veces, por lo que se puede crear una lista de todo lo que no están presentes en ambos, y entonces se podría combinar estos dos resultados a tener una lista de todas las diferencias.
Pero esta es una operación destructiva, por lo que si no quiere perder la información, copie Set
y opere en esa.
ACTUALIZACIÓN:
Parece que mi suposición de lo que es en la matriz está mal, por lo removeAll()
no va a funcionar, pero con un requisito de 5 ms, depeending en el número de elementos para buscar podría ser un problema.
Por lo tanto, parece que HashMap<String, Animal>
sería la mejor opción, ya que es rápido en la búsqueda.
Animal es una interfaz con al menos una propiedad, String name
. Para cada clase que implemente Animal
escriba el código para Equals
y hashCode
. Puede encontrar alguna discusión aquí: http://www.ibm.com/developerworks/java/library/j-jtp05273.html. De esta forma, si quieres que el valor de hash sea una combinación del tipo de animal y el nombre, entonces eso estará bien.
Por lo tanto, el algoritmo básico es mantener todo en los hashmaps, y luego buscar diferencias, simplemente obtener una matriz de claves, y buscar para ver si esa clave está contenida en la otra lista, y si no está No lo pongas en List<Object>
, almacenando el valor allí. Querrá hacer esto dos veces, por lo tanto, si tiene al menos un procesador de doble núcleo, puede obtener algún beneficio de que ambas búsquedas se realicen en hilos separados, pero luego querrá usar uno de los tipos de datos concurrentes agregado en JDK5 para que no tenga que preocuparse por las sincronizaciones en la lista combinada de diferencias.
Por lo tanto, lo escribiría primero como un solo hilo y prueba, para obtener algunas ideas sobre cuánto más rápido es, también lo comparo con la implmemntación original. Luego, si lo necesita más rápido, intente usar hilos, de nuevo, compare para ver si hay un aumento de velocidad.
Antes de realizar cualquier optimización, asegúrese de tener algunas métricas sobre lo que ya tiene, de modo que pueda comparar y ver si el único cambio conducirá a un aumento en la velocidad.
Si realiza demasiados cambios a la vez, uno puede tener una gran mejora en la velocidad, pero otros pueden llevar a una disminución del rendimiento, y no se verá, por lo que cada cambio debe ser uno a hora.
No pierda las otras implementaciones, sin embargo, usando pruebas unitarias y probando quizás 100 veces cada una, puede hacerse una idea de qué mejora le brinda cada cambio.
podemos clasificar las matrices? –
@ Funcional - Sí. –
Para evitar malentendidos adicionales, ¿puede corregir su ejemplo y no hacer que sean objetos? vamos a tener problemas con las soluciones, ya que entonces necesitaríamos comparar algo dentro de cada objeto para ver si son iguales, como el nuevo Cat() == new Cat() = falso, ya que son dos objetos diferentes. –