Finding duplicate values in arraylist

后端 未结 5 685
你的背包
你的背包 2020-11-28 06:41

I have an ArrayList

For Example

class Car{
   String carName;
   int carType;
}

Now, I have to find if the

相关标签:
5条回答
  • 2020-11-28 07:12

    If you have

    class Car{
       String carName;
       int carType;
    }
    

    and

    List<Car> list;
    

    that contains a list of cars, then you could have a method like

    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;
    }
    

    to find out whether the list of cars have cars with duplicate names.

    0 讨论(0)
  • 2020-11-28 07:19

    Try this:

    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());
      }
    }
    

    Note: this will give you the car names that are duplicate. A follow on would be extracting all cars with those names from the list (if you need the Car objects)

    0 讨论(0)
  • 2020-11-28 07:23

    Create a comparator:

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

    Now add all the cars of the ArrayList to a SortedSet, preferably TreeSet; if there are duplicates add to the list of duplicates:

    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);
        }
    }
    

    Finally in your duplicates you will have all the duplicates.

    0 讨论(0)
  • 2020-11-28 07:23

    Override equals() and hashCode() methods in your Car class and use a Set implementation such as HashSet instead of ArrayList.

    0 讨论(0)
  • 2020-11-28 07:30

    I did a similiar program that shows you the words that where repeated in an ArrayList (also it shows the arraylist content and the larger string)

    Oh, by the way, variables, and other stuff like comments are in spanish, cause I speak spanish:/ but, if you see the code you can see that I resolved the problem with 2 bucles for!

    public void mostrarDiecisiete() {
    
    
            ArrayList<String> array = new ArrayList<String>();
    
            ArrayList<String> array2 = new ArrayList<String>();
    
            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);
    
        }
    
    }
    

    This is my output:

    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)
    
    0 讨论(0)
提交回复
热议问题