Encontrar valores duplicados en la lista de arrays

Tengo una ArrayList

Por ejemplo

 class Car{ String carName; int carType; } 

Ahora, tengo que encontrar si la lista tiene algún automóvil con el mismo nombre. ¿Cuál es la mejor manera de hacer esto?

Crear un comparador:

 public class CarComparator implements Comparator { public int compare(Car c1, Car c2) { return c1.carName.compareTo(c2.carName); } } 

Ahora agregue todos los automóviles de ArrayList a SortedSet , preferiblemente TreeSet ; si hay duplicados, agregue a la lista de duplicados:

 List duplicates = new ArrayList(); Set carSet = new TreeSet(new CarComparator()); for(Car c : originalCarList) { if(!carSet.add(c)) { duplicates.add(c); } } 

Finalmente en tus duplicates tendrás todos los duplicados.

Si usted tiene

 class Car{ String carName; int carType; } 

y

 List list; 

que contiene una lista de autos, entonces podrías tener un método como

 public static boolean hasDuplicates(List p_cars) { final List usedNames = new ArrayList(); for (Car car : p_cars) { final String name = car.carName; if (usedNames.contains(name)) { return true; } usedNames.add(name); } return false; } 

para averiguar si la lista de automóviles tiene automóviles con nombres duplicados.

Prueba esto:

 List cars = getCars(); Set names = new HashSet(); for (Car car:cars) { if (names.contains(car.getName()) { duplicate(car); // some magic handler } else { names.add(car.getName()); } } 

Nota: esto le dará los nombres de los automóviles que están duplicados. Un seguimiento sería extraer todos los automóviles con esos nombres de la lista (si necesita los objetos del automóvil)

hashCode() métodos equals() y hashCode() en su clase Car y utilice una implementación de Set como HashSet lugar de ArrayList .

Hice un progtwig similar que muestra las palabras que se repiten en una ArrayList (también muestra el contenido del arraylist y la cadena más grande)

Oh, por cierto, las variables y otras cosas como los comentarios están en español, porque hablo español: / pero, si ves el código, puedes ver que resolví el problema con 2 bucles.

 public void mostrarDiecisiete() { ArrayList array = new ArrayList(); ArrayList array2 = new ArrayList(); Scanner sc = new Scanner(System.in); String sss = ""; System.out.println(""); while (!sss.equalsIgnoreCase("fin")) { System.out.print("Ingrese un string: "); sss = sc.nextLine(); if (!sss.equalsIgnoreCase("fin")) { array.add(sss); } } int mayor = 0; Iterator it = array.iterator(); String s = ""; boolean repetir = true; int j = 0; for (int i = 0; i < array.size(); i++) { System.out.println(""); System.out.print("Posicion: " + i + " del array: " + array.get(i) + " " + "\n"); if (array.get(i).length() > mayor) { mayor = array.get(i).length(); s = array.get(i); } } for (int i = 0; i < array.size(); i++) { System.out.println("vuelta nro: " + i + " del primer for"); if(j==array.size()){ j=0;//inicializa de nuevo j en cero si j alcanzo el tamaño del array j=i;//inicializa j en el numero de vuelta del primer for, para luego sumarle uno mas asi siempre compara con el siguiente } for (j++; j < array.size(); j++) {//empieza a comparar con uno mas adelante siempre if (array.get(i).equalsIgnoreCase(array.get(j))) {//si el array de la posicion i se repite entre la 1 y la ultima de la pos j System.out.println("el string " + array.get(i) + " se repite en la posicion " + j); array2.add(array.get(i)); // se agrega a array2 } else { System.out.println("String: " + array.get(i) + " no se repite con la posicion " + j); } } } System.out.println(""); System.out.print( "el array es: " + array); System.out.println( ""); System.out.println( "El array mas largo es: " + s + " y tiene " + mayor + " caracteres"); System.out.println( ""); System.out.println( "Los Strings repetidos son" + array2); } } 

Este es mi resultado:

 Ingrese un string: vaca Ingrese un string: perro Ingrese un string: dinosaurio Ingrese un string: gato Ingrese un string: cebra Ingrese un string: DiNoSauRiO Ingrese un string: VACA Ingrese un string: hamster Ingrese un string: gato Ingrese un string: canario Ingrese un string: elefante Ingrese un string: tortuga Ingrese un string: fin Posicion: 0 del array: vaca Posicion: 1 del array: perro Posicion: 2 del array: dinosaurio Posicion: 3 del array: gato Posicion: 4 del array: cebra Posicion: 5 del array: DiNoSauRiO Posicion: 6 del array: VACA Posicion: 7 del array: hamster Posicion: 8 del array: gato Posicion: 9 del array: canario Posicion: 10 del array: elefante Posicion: 11 del array: tortuga vuelta nro: 0 del primer for String: vaca no se repite con la posicion 1 String: vaca no se repite con la posicion 2 String: vaca no se repite con la posicion 3 String: vaca no se repite con la posicion 4 String: vaca no se repite con la posicion 5 el string vaca se repite en la posicion 6 String: vaca no se repite con la posicion 7 String: vaca no se repite con la posicion 8 String: vaca no se repite con la posicion 9 String: vaca no se repite con la posicion 10 String: vaca no se repite con la posicion 11 vuelta nro: 1 del primer for String: perro no se repite con la posicion 2 String: perro no se repite con la posicion 3 String: perro no se repite con la posicion 4 String: perro no se repite con la posicion 5 String: perro no se repite con la posicion 6 String: perro no se repite con la posicion 7 String: perro no se repite con la posicion 8 String: perro no se repite con la posicion 9 String: perro no se repite con la posicion 10 String: perro no se repite con la posicion 11 vuelta nro: 2 del primer for String: dinosaurio no se repite con la posicion 3 String: dinosaurio no se repite con la posicion 4 el string dinosaurio se repite en la posicion 5 String: dinosaurio no se repite con la posicion 6 String: dinosaurio no se repite con la posicion 7 String: dinosaurio no se repite con la posicion 8 String: dinosaurio no se repite con la posicion 9 String: dinosaurio no se repite con la posicion 10 String: dinosaurio no se repite con la posicion 11 vuelta nro: 3 del primer for String: gato no se repite con la posicion 4 String: gato no se repite con la posicion 5 String: gato no se repite con la posicion 6 String: gato no se repite con la posicion 7 el string gato se repite en la posicion 8 String: gato no se repite con la posicion 9 String: gato no se repite con la posicion 10 String: gato no se repite con la posicion 11 vuelta nro: 4 del primer for String: cebra no se repite con la posicion 5 String: cebra no se repite con la posicion 6 String: cebra no se repite con la posicion 7 String: cebra no se repite con la posicion 8 String: cebra no se repite con la posicion 9 String: cebra no se repite con la posicion 10 String: cebra no se repite con la posicion 11 vuelta nro: 5 del primer for String: DiNoSauRiO no se repite con la posicion 6 String: DiNoSauRiO no se repite con la posicion 7 String: DiNoSauRiO no se repite con la posicion 8 String: DiNoSauRiO no se repite con la posicion 9 String: DiNoSauRiO no se repite con la posicion 10 String: DiNoSauRiO no se repite con la posicion 11 vuelta nro: 6 del primer for String: VACA no se repite con la posicion 7 String: VACA no se repite con la posicion 8 String: VACA no se repite con la posicion 9 String: VACA no se repite con la posicion 10 String: VACA no se repite con la posicion 11 vuelta nro: 7 del primer for String: hamster no se repite con la posicion 8 String: hamster no se repite con la posicion 9 String: hamster no se repite con la posicion 10 String: hamster no se repite con la posicion 11 vuelta nro: 8 del primer for String: gato no se repite con la posicion 9 String: gato no se repite con la posicion 10 String: gato no se repite con la posicion 11 vuelta nro: 9 del primer for String: canario no se repite con la posicion 10 String: canario no se repite con la posicion 11 vuelta nro: 10 del primer for String: elefante no se repite con la posicion 11 vuelta nro: 11 del primer for el array es: [vaca, perro, dinosaurio, gato, cebra, DiNoSauRiO, VACA, hamster, gato, canario, elefante, tortuga] El array mas largo es: dinosaurio y tiene 10 caracteres Los Strings repetidos son[vaca, dinosaurio, gato] BUILD SUCCESSFUL (total time: 2 minutes 48 seconds)