我有ArrayList<Car>
例如
class Car{
String carName;
int carType;
}
现在,我必须找到列表中是否有任何同名汽车。这样做的最佳方式是什么?
答案 0 :(得分:25)
创建一个比较器:
public class CarComparator implements Comparator<Car>
{
public int compare(Car c1, Car c2)
{
return c1.carName.compareTo(c2.carName);
}
}
现在将ArrayList
的所有汽车添加到SortedSet
,最好是TreeSet
;如果有重复项添加到重复项列表中:
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);
}
}
最后在你的duplicates
中,您将获得所有重复项。
答案 1 :(得分:8)
如果你有
class Car{
String carName;
int carType;
}
和
List<Car> list;
包含汽车列表,那么您可以使用
之类的方法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;
}
查明汽车列表是否有重复名称的汽车。
答案 2 :(得分:5)
试试这个:
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());
}
}
注意:这将为您提供重复的汽车名称。接下来将从列表中提取具有这些名称的所有汽车(如果您需要Car对象)
答案 3 :(得分:1)
覆盖equals()
课程中的hashCode()
和Car
方法,并使用Set
实施,例如HashSet
代替ArrayList
。
答案 4 :(得分:0)
我做了一个类似的程序,向你显示在ArrayList中重复的单词(也显示了arraylist内容和更大的字符串)
哦,顺便说一句,变量和评论等其他内容都是西班牙语,因为我说西班牙语:/但是,如果你看到代码,你可以看到我解决了2个问题的问题!
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);
}
}
这是我的输出:
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)