ho un ArrayList<Car>
Ricerca di valori duplicati in arraylist
Per esempio
class Car{
String carName;
int carType;
}
Ora, devo trovare se la lista ha qualche vetture che hanno lo stesso nome. Qual è il modo migliore per farlo?
ho un ArrayList<Car>
Ricerca di valori duplicati in arraylist
Per esempio
class Car{
String carName;
int carType;
}
Ora, devo trovare se la lista ha qualche vetture che hanno lo stesso nome. Qual è il modo migliore per farlo?
Creare un comparatore di prezzi:
public class CarComparator implements Comparator<Car>
{
public int compare(Car c1, Car c2)
{
return c1.carName.compareTo(c2.carName);
}
}
Ora aggiungere tutte le vetture del ArrayList
ad un SortedSet
, preferibilmente TreeSet
; se ci sono duplicati aggiungere alla lista dei duplicati:
List<Car> duplicates = new ArrayList<Car>();
Set<Car> carSet = new TreeSet<Car>(new CarComparator());
for(Car c : originalCarList)
{
if(!carSet.add(c))
{
duplicates.add(c);
}
}
Infine nelle vostre duplicates
avrete tutti i duplicati.
Override equals()
e hashCode()
metodi nella classe Car
e utilizzare un'implementazione Set
come HashSet
invece di ArrayList
.
non posso toccare la macchina object..I solo l'arraylist di oggetto Car allora ho da trovare se qualsiasi auto nella lista ha lo stesso nome. ..... – Makky
Prova questa:
List<Car> cars = getCars();
Set<String> names = new HashSet<String>();
for (Car car:cars) {
if (names.contains(car.getName()) {
duplicate(car); // some magic handler
} else {
names.add(car.getName());
}
}
Nota: questo vi darà i nomi di automobili che sono duplicati. Un follow on sarebbe l'estrazione di tutte le auto con i nomi della lista (se avete bisogno gli oggetti auto)
vedere l'esempio sopra .... Grazie comunque – Makky
Questa soluzione è decisamente migliore della soluzione più votata. Questo è o (n) algoritmo con o (n) spazio ma l'altra soluzione è o (nlogn) –
Se hai
class Car{
String carName;
int carType;
}
e
List<Car> list;
che contiene un elenco di auto, allora si potrebbe avere un metodo come
public static boolean hasDuplicates(List<Car> p_cars) {
final List<String> usedNames = new ArrayList<String>();
for (Car car : p_cars) {
final String name = car.carName;
if (usedNames.contains(name)) {
return true;
}
usedNames.add(name);
}
return false;
}
per scoprire se l'elenco dei le auto hanno macchine con nomi duplicati.
In generale' usedNames' deve essere un 'HashSet' altrimenti si ottiene O (n) complessità di ciascun controllo. Con 'HashSet' ottieni O (1). – WindRider
@ Peri461 era il titolo, la domanda era "Devo trovare se la lista ha delle macchine con lo stesso nome" –
Okay abbastanza giusto, mi scuso. – Peri461
ho fatto un programma simile che vi mostra le parole che dove ripetuto in un ArrayList (anche esso mostra il contenuto ArrayList e la stringa più grande)
Oh, a proposito, le variabili, e altre cose del genere commenti sono in spagnolo, perché parlo spagnolo:/ma, se vedi il codice puoi vedere che ho risolto il problema con 2 buche per!
Questa è la mia uscita:
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)
Perché non usare 'HashSet'. Fornisce o (1) per tutte le operazioni mentre la tua scelta 'TreeSet' è o (logn). Ho sbagliato? –
Con Java 8 flavor: ' Set duplicazione = Imposta.newHashSet(); Stream.of (car1, car2, car3) .sorted ([comparatore]). Reduce ((auto, auto2) -> { if (car.equals (car2)) { duplication.add (car2); } ritorno car2; }); System.out.println (duplicazione); ' –
chaiyachaiya