¿Cómo crear una lista de objetos únicos / distintos (sin duplicados) en Java?
En este momento estoy usando HashMap<String, Integer>
para hacer esto ya que la clave se sobrescribe y, por lo tanto, al final podemos obtener HashMap.getKeySet()
cuál sería única. Pero estoy seguro de que debería haber una mejor manera de hacer esto, ya que la parte de valor se desperdicia aquí.
fuente
Quiero aclarar algunas cosas aquí para el póster original a las que otros han aludido pero que no han dicho explícitamente. Cuando dices que quieres una lista única, esa es la definición misma de un conjunto ordenado. Algunas otras diferencias clave entre la interfaz de conjunto y la interfaz de lista son que la lista le permite especificar el índice de inserción. Entonces, la pregunta es ¿realmente necesita la interfaz de lista (es decir, para compatibilidad con una biblioteca de terceros, etc.), o puede rediseñar su software para usar la interfaz de configuración? También debe considerar lo que está haciendo con la interfaz. ¿Es importante buscar elementos por su índice? ¿Cuántos elementos esperas en tu set? Si vas a tener muchos elementos, ¿es importante realizar pedidos?
Si realmente necesita una Lista que solo tiene una restricción única, existe la clase de Apache Common Utils org.apache.commons.collections.list.SetUniqueList que le proporcionará la interfaz de Lista y la restricción única. Eso sí, esto rompe la interfaz de la lista. Sin embargo, obtendrá un mejor rendimiento si necesita buscar en la lista por índice. Si puede lidiar con la interfaz Set y tiene un conjunto de datos más pequeño, LinkedHashSet podría ser una buena opción. Solo depende del diseño y la intención de su software.
Nuevamente, existen ciertas ventajas y desventajas para cada colección. Algunas inserciones rápidas pero lecturas lentas, algunas tienen lecturas rápidas pero inserciones lentas, etc. Tiene sentido dedicar una buena cantidad de tiempo a la documentación de las colecciones para aprender completamente sobre los detalles más finos de cada clase e interfaz.
fuente
Utilice
new HashSet<String>
un ejemplo:fuente
Podría usar a
HashSet<String>
para mantener una colección de objetos únicos. Si losInteger
valores en su mapa son importantes, entonces puede usar elcontainsKey
método de mapas para probar si su clave ya está en el mapa.fuente
HashSet<String>
(o) cualquierSet
implementación puede hacer el trabajo por usted.Set
no permita duplicados.Aquí está javadoc para HashSet.
fuente
No sé qué tan eficiente es esto, sin embargo funcionó para mí en un contexto simple.
fuente
Es posible que desee utilizar una de las clases de implementación de
java.util.Set<E>
Interfaz, por ejemplojava.util.HashSet<String>
, la clase de colección.fuente