2010-06-12 5 views
0

Je veux savoir comment supprimer les doublons dans l'objet.supprimer des doublons de données de tableau d'objets java

par exemple

cat c[] = new cat[10]; 

c[1].data = "ji"; 
c[2].data = "pi"; 
c[3].data = "ji"; 
c[4].data = "lp"; 

c[5].data = "ji"; 
c[6].data = "pi"; 
c[7].data = "jis"; 
c[8].data = "lp"; 

c[9].data = "js"; 
c[10].data = "psi"; 

je voudrais supprimer la valeur des doublons de tableau d'objets.

merci et avance

+0

Notez que Java, les indices de tableau sont 0 sur la base, à savoir dans le tableau ci-dessus comme il est maintenant, c [0] est laissé vide, et la référence à c [10] provoque une 'ArrayIndexOutOfBoundsException'. Les index devraient être 0..9 à la place. –

Répondre

1

Vous pouvez créer un tableau temporaire, boucle à travers le tableau original, et pour chaque élément, vérifier si la valeur déjà dans le tableau de température ou non. Sinon, ajoutez-le dans.

Vous pouvez également utiliser Set et remplacer les égaux et méthode hashCode

+0

Il suffit d'utiliser 'Set ' (spécifiquement' HashSet '), et d'implémenter' Comparable' ou de fournir 'Comparator'. –

+1

Non, il ne devrait pas implémenter comparable. Pour Set et Map, vous devez remplacer la méthode equals et hashCode – vodkhang

4

Je suppose que vous voulez créer un autre tableau qui est double libre. (Vous ne pouvez pas changer la taille d'un tableau)

Vous pouvez implémenter hashCode et égaler et utiliser un HashSet, mais sans cela, vous pouvez créer un comparateur.

Cependant, l'approche la plus simple peut être en utilisant le « chat » classe et tableau « chats »

Cat[] cats = { ... }; 
Set<String> datas = new HashSet<String>(); 
List<Cat> catList = new ArrayList<Cat>(); 
for(Cat cat: cats) if(datas.add(cat.data)) catList.add(cat); 
Cat[] unqiueCats = catList.toArray(new Cat[catList.size()]); 
0

Voici un hack pour faire ce que vous vouliez (compile, espérons aussi):

// Assuming the code in the question is here. 

java.util.List<cat> tmp = new java.util.LinkedList<cat>(); 
java.util.HashSet<String> set = new HashSet<String>(); 

for (int i = 0; i < c.length; ++i) 
    if (set.put(c[i].data)) tmp.add(c[i]); 

c = tmp.toArray(c); 
+0

Pour une raison quelconque, tous les génériques ont été supprimés de ma réponse par le système de commentaires. Tant pis. – megari

+0

pour l'extrait de code, retrait de 4 espaces. L'éditeur a un bouton pour cela, il suffit de surligner votre code et de cliquer. – polygenelubricants

2

Quelque chose comme ça devrait fonctionner? Assurez-vous d'importer java.util.Arrays et java.util.HashSet.

/** 
* Removes duplicates from an array. Objects in the array must properly 
* implement hashCode() and equals() for this to work correctly. 
*/ 
public static <E> E[] removeDuplicates(E[] array) { 
    // convert input array to populated list 
    List<E> list=Arrays.asList(array); 

    // convert list to populated set 
    HashSet<E> set=new HashSet<E>(); 
    set.addAll(list); 

    // convert set to array & return, 
    // use cast because you can't create generic arrays 
    return (E[]) set.toArray(); 
} 
+0

Ceci est une manière agréable et intelligente de le faire sans aucune boucle (dans votre code). La méthode 'addAll()', bien sûr, fera tout cela pour vous, et probablement plus efficacement puisqu'elle peut fonctionner avec l'implémentation interne de HashSet. –

Questions connexes