2011-09-02 14 views
9

में मुझे लगता है मैं अगर सूची में एक ही नाम होने के लिए किसी भी कारों है खोजने के लिए अब एक ArrayList<Car>ढूँढना डुप्लिकेट मानों ArrayList

उदाहरण

लिए
class Car{ 
    String carName; 
    int carType; 
} 

है,। इसे करने का बेहतरीन तरीका क्या है?

उत्तर

22

एक तुलनित्र बनाएँ:

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

अब एक SortedSet को ArrayList की सभी कारों जोड़ने के लिए, अधिमानतः TreeSet; अंत में अपने 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); 
    } 
} 

: देखते हैं अगर डुप्लिकेट डुप्लिकेट की सूची में जोड़ें।

+2

क्यों हैशसेट का उपयोग नहीं कर रहा है। यह सभी परिचालनों के लिए ओ (1) प्रदान करता है जबकि आपकी पसंद 'ट्रीसेट' ओ (लॉगऑन) है। क्या मै गलत हु? –

+1

जावा 8 स्वाद के साथ: ' डुप्लिकेशन = सेट सेट करें।newHashSet(); Stream.of (car1, car2, car3) .sorted ([तुलनित्र])। ((कार, कार 2) -> { अगर (car.equals (car2)) { duplication.add (car2); } रिटर्न कार 2; }); System.out.println (डुप्लिकेशन); ' – chaiyachaiya

1

अवहेलना अपने Car कक्षा में equals() और hashCode() तरीकों और इस तरह के HashSet बजाय ArrayList के रूप में एक Set कार्यान्वयन का उपयोग करें।

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

नोट::

+0

मैं स्पर्श नहीं कर सकते कार object..I सिर्फ कार वस्तु की ArrayList तो मैं अगर सूची में किसी भी कारों एक ही नाम है खोजने के लिए है:

यह मेरी उत्पादन होता है। ..... – Makky

5

इस प्रयास करें यह आप कार ऐसे नाम हैं जो डुप्लिकेट हैं दे देंगे। एक फ़ॉलो पर (यदि आप कार वस्तुओं की जरूरत है) सूची में से उन लोगों के नामों के साथ सभी कारों निकालने की जाएगी

+0

उपरोक्त उदाहरण देखें .... धन्यवाद वैसे भी – Makky

+0

यह समाधान सर्वोत्तम मतदान समाधान से बेहतर तरीका है। यह ओ (एन) एल्गोरिदम ओ (एन) स्पेस के साथ है लेकिन दूसरा समाधान ओ (nlogn) –

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

की तरह एक विधि हो सकता था कि क्या पता लगाने के लिए की सूची कारों में डुप्लिकेट नाम वाली कारें हैं।

+0

आम तौर पर 'इस्तेमाल किए गए नाम' को 'हैशसेट' होना चाहिए अन्यथा आपको प्रत्येक चेक की ओ (एन) जटिलता मिलनी चाहिए। 'हैशसेट' के साथ आपको ओ (1) मिलता है। – WindRider

+0

@ पेरी 461 जो शीर्षक था, सवाल था "मुझे यह पता लगाना है कि सूची में कोई कार है या नहीं," –

+0

ठीक है, मैं क्षमा चाहता हूं। – Peri461

0

मैं एक समान कार्यक्रम है कि आप शब्दों से पता चलता है कि जहां एक ArrayList में दोहराया टिप्पणी कर रहे हैं की तरह

ओह, वैसे, चर, और अन्य सामग्री (भी यह ArrayList सामग्री और बड़ा स्ट्रिंग से पता चलता) किया स्पेनिश में, क्योंकि मैं स्पैनिश बोलता हूं:/लेकिन, अगर आप कोड देखते हैं तो आप देख सकते हैं कि मैंने समस्या को हल करने के लिए 2 बक्से के साथ हल किया है!

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) 
संबंधित मुद्दे