Java: evitar insertar duplicados en listas de arrays

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:

  1. public boolean add (E e)
  2. public void add (índice int, elemento E)
  3. public boolean addAll (colección de colección)
  4. public boolean addAll (índice int, colección de colección)