Soy un novato de Java Tengo una ArrayList
y quiero evitar duplicados en la inserción. Mi ArrayList
es
ArrayList karList = new ArrayList();
y el campo que quiero verificar es:
kar.getinsertkar().
He leído que puedo usar HashSet
o HashMap
pero no tengo ni idea.
Siempre que quiera evitar duplicados, quiere usar un Set
.
En este caso, un HashSet estaría bien para ti.
HashSet karSet = new HashSet(); karSet.add(foo); karSet.add(bar); karSet.add(foo); System.out.println(karSet.size()); //Output is 2
Para completar, también le sugiero que use la versión genérica (parametrizada) de la clase, suponiendo Java 5 o superior.
HashSet stringSet = new HashSet (); HashSet intSet = new HashSet (); ...etc...
Esto le dará algún tipo de seguridad también para obtener elementos dentro y fuera de su conjunto.
Use un HashSet
lugar de un ArrayList
. Pero, para realmente hacer que HashSet
realmente funcione bien, debe anular los métodos equals()
y hashCode()
de la clase / objetos que se insertan en el HashSet
.
Ejemplo de Enemigo:
Set set = new HashSet (); set.add(foo); set.add(bar); public class MyObject { @Override public boolean equals(Object obj) { if (obj instanceof MyObject) return (this.id = obj.id) else return false; } // now override hashCode() }
Consulte la siguiente documentación para anular hashCode()
y equals()
.
Puede usar LinkedHashSet
para evitar elementos duplicados y mantener el orden de inserción.
http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
Un conjunto es simplemente una colección que no puede contener duplicados por lo que suena perfecto para ti.
También es muy simple de implementar. Por ejemplo:
Set mySet = new HashSet ();
Esto le proporcionaría un conjunto que puede contener Objetos de tipo Cadena.
Para agregar al conjunto es tan simple:
mySet.add("My first entry!");
Por definición de un conjunto, puede agregar lo que quiera y nunca ejecutar un duplicado.
¡Que te diviertas!
EDITAR: Si decide que está configurado como inactivo usando una ArrayList, es fácil ver si un objeto ya está en la lista antes de agregarlo. Por ejemplo:
public void addToList(String newEntry){ if(!myList.contains(newEntry)) myList.add(newEntry); }
Nota: Todos mis ejemplos suponen que está utilizando objetos String, pero pueden intercambiarse fácilmente a cualquier otro tipo de objeto.
Necesita usar cualquier implementación de Set
, por ejemplo, puede usar HashSet
. Si desea add
objetos kar
personalizados a su HashSet
, debe override
método equals
y hashcode
. Puedes leer más sobre equals
y hashcode
, ver
Puede implementar su propia lista, que amplía LinkedList y anular sus métodos de agregar: