Tôi có một ArrayList<Car>
Finding giá trị trùng lặp trong ArrayList
Ví dụ
class Car{
String carName;
int carType;
}
Bây giờ, tôi phải tìm nếu danh sách có bất kỳ chiếc xe có cùng tên. Cách tốt nhất để làm việc này là gì?
Tôi có một ArrayList<Car>
Finding giá trị trùng lặp trong ArrayList
Ví dụ
class Car{
String carName;
int carType;
}
Bây giờ, tôi phải tìm nếu danh sách có bất kỳ chiếc xe có cùng tên. Cách tốt nhất để làm việc này là gì?
Tạo một so sánh:
public class CarComparator implements Comparator<Car>
{
public int compare(Car c1, Car c2)
{
return c1.carName.compareTo(c2.carName);
}
}
Bây giờ thêm tất cả những chiếc xe của ArrayList
đến một SortedSet
, tốt nhất TreeSet
; nếu có các trùng lặp thêm vào danh sách các bản sao:
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);
}
}
Cuối cùng, trong duplicates
bạn sẽ có tất cả các bản sao.
Override equals()
và hashCode()
phương pháp trong lớp Car
của bạn và sử dụng thực hiện Set
như HashSet
thay vì ArrayList
.
tôi không thể chạm vào xe object..I chỉ ArrayList của đối tượng xe sau đó tôi đã tìm nếu có chiếc xe trong danh sách có cùng tên. ..... – Makky
Hãy thử điều này:
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());
}
}
Lưu ý: đây sẽ cung cấp cho bạn tên chiếc xe đó là trùng lặp. Một tiếp theo trên sẽ được giải nén tất cả các xe ô tô với những cái tên trong danh sách (nếu bạn cần các đối tượng xe)
xem ví dụ trên .... Thanks anyway – Makky
Giải pháp này là cách tốt hơn so với giải pháp bình chọn tốt nhất. Đây là thuật toán o (n) với không gian o (n) nhưng giải pháp khác là o (nlogn) –
Nếu bạn có
class Car{
String carName;
int carType;
}
và
List<Car> list;
có chứa một danh sách các xe hơi, sau đó bạn có thể có một phương pháp như
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;
}
để tìm hiểu xem danh sách các ô tô có ô tô có tên trùng lặp.
Nói chung' usedNames' phải là một 'HashSet' nếu không bạn sẽ nhận được O (n) phức tạp của mỗi kiểm tra. Với 'HashSet' bạn nhận được O (1). – WindRider
@ Peri461 đó là tiêu đề, câu hỏi là "Tôi phải tìm nếu danh sách có bất kỳ chiếc xe có cùng tên" –
Được rồi, đủ công bằng, tôi xin lỗi. – Peri461
tôi đã làm một chương trình tương tự chỉ ra cho bạn những lời đó mà lặp đi lặp lại trong một ArrayList (còn nó cho thấy nội dung ArrayList và chuỗi lớn hơn)
Oh, bằng cách này, các biến, và các công cụ khác như ý kiến được bằng tiếng Tây Ban Nha, vì tôi nói tiếng Tây Ban Nha:/nhưng, nếu bạn thấy mã, bạn có thể thấy rằng tôi đã giải quyết vấn đề với 2 bucles cho!
Đây là kết quả của tôi:
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)
Tại sao không sử dụng 'HashSet'. Nó cung cấp o (1) cho tất cả các hoạt động trong khi bạn chọn 'TreeSet' là o (logn). Liệu tôi có sai? –
Với hương vị Java 8: ' Đặt sao chép = Bộ.newHashSet(); Stream.of (car1, car2, car3) .sắp ((ô tô, car2) -> { nếu (car.equals (car2)) { sao chép.add (car2); } trả lại ô tô2; }); System.out.println (sao chép); ' –
chaiyachaiya