Comment sélectionner les valeurs en double à partir d'une liste en java?
Par exemple ma liste contient {4, 6, 6, 7, 7, 8} et je veux le résultat final = {6, 6, 7, 7}
Une façon est d'une boucle sur la liste et d'éliminer les valeurs uniques (4, 8 dans ce cas).
Est-il un autre moyen efficace plutôt qu'en parcourant la liste ? J'ai posé cette question parce que la liste que je suis en train de travailler est très grand ?
Mon code est
List<Long> duplicate = new ArrayList();
for (int i = 0; i < list.size(); i++) {
Long item = (Long) list.get(i);
if (!duplicate.contains(item)) {
duplicate.add(item);
}
}
Vous aurez à boucle à travers l'ensemble de la liste, au moins une fois si vous voulez trouver tous les doublons. Il n'y a pas de "plus efficace" pour cela avec une liste, si vous avez à comparer chaque valeur de la liste, pour le rendre plus efficace la solution réside dans la création de la liste.
Vous avez besoin d'au moins une boucle. Si vous voulez un code plus efficace (n'est pas garantie dans tous les cas, si), vous pouvez l'essayer par la commande de la liste en premier et ensuite vérifier si les "voisins" sont différents (si si, vous avez un point unique, il suffit de retirer de la liste)
Vous avez toujours la possibilité d'imprimer la liste et compte les doublons si vous préférez ne pas faire de boucle.
Vous êtes conscient que votre code ne fait pas ce que vous demandez dans votre question?
Vous avez besoin d'au moins une boucle. Si vous voulez un code plus efficace (n'est pas garantie dans tous les cas, si), vous pouvez l'essayer par la commande de la liste en premier et ensuite vérifier si les "voisins" sont différents (si si, vous avez un point unique, il suffit de retirer de la liste)
Vous avez toujours la possibilité d'imprimer la liste et compte les doublons si vous préférez ne pas faire de boucle.
Vous êtes conscient que votre code ne fait pas ce que vous demandez dans votre question?
OriginalL'auteur Lucky_Singh | 2013-06-25
Vous devez vous connecter pour publier un commentaire.
Quelques bonnes réponses jusqu'à présent, mais une autre option juste pour le plaisir de celui-ci. Une boucle sur la liste d'essayer de placer chaque nombre dans un Jeu par exemple, un HashSet. Si le complément de la méthode renvoie la valeur false, vous savez le nombre est un doublon et il devrait aller dans la liste en double.
EDIT: quelque Chose comme cela devrait le faire
OriginalL'auteur wobblycogs
Vous pouvez louer une magie de l'elfe et de le laisser faire pour vous. Comment jamais vous voulez faire cela sans boucle, à travers elle? Si vous n'avez pas de boucle dans la liste, vous ne serez pas en mesure d'avoir un regard sur les éléments. C'est comme vous voulez, pour faire la somme de tout un tas de numéros sans regarder à ces chiffres. En additionnant les éléments est beaucoup plus facile que la recherche de doublons ou la recherche d'éléments uniques. En général, 97% de ce code n'est en parcourant les listes et les données et les processus et de les mettre à jour.
Donc, dit que, vous ont pour boucle. Maintenant, vous pouvez choisir la manière la plus efficace. Certaines méthodes viennent à l'esprit:
contains
parcourt la liste des cours.))OriginalL'auteur Martijn Courteaux
Je ne suis pas sûr de l'efficacité, mais je trouve le code facile à lire (et qui devraient être privilégiées.
EDIT: changement de
Lists.newArrayList()
ànew ArrayList<Number>();
Lists.newArrayList()
)? Mais vous pouvez simplement utilisernew ArrayList<>()
;ah, oui, merci... c'est à partir de Goyave
Je sais. Je faisais allusion à
Lists.newArrayList()
C'est effectivement une bonne tâche à l'aide de Goyave et de ces filtres et les prédicats.
J'ai réalisé après que j'ai commenté. Excusez-moi. 😉
OriginalL'auteur Jiri Kremser
J'aime répondre Java 8, les Ruisseaux pour trouver le double des éléments. Solution de retour seulement unique doublons.
OriginalL'auteur GKislin
Ont un
maintenir le comte et le nombre, à la fin de l'itération du jeu de clés et d'obtenir des valeurs avec plus d'un titre
pourquoi voulons-nous que les frais généraux de tri, de Hachage est plus rapide!
eh bien, simplement, si l'OP veut que les chiffres soient triés. Dans l'échantillon, les chiffres sont triés.
eh bien, Si j'utilise de l'Arbre ou de Hachage de la Carte, j'ai encore à itérer. Les données que j'ai affaire à une liste de grandes chiffrée des éléments de texte.
Si, pour une raison quelconque, le résultat devrait être triées (bien que personne n'a mentionné qu'), il serait plus rapide pour trier la liste des résultats, au lieu d'utiliser un TreeMap pour compter le nombre d'événements juste pour en avoir le potentiel de profit plus tard, le résultat est déjà trié.
OriginalL'auteur Jigar Joshi
Votre
List
devrait idéalement avoir été unSet
qui ne permet pas de doublons dans la première place. Comme une alternative à une boucle, vous pouvez soit convertir et de passer àSet
ou de l'utiliser de manière temporaire afin d'éliminer les doublons comme suit:OriginalL'auteur Ravi Thapliyal
OriginalL'auteur Dhamu
Avec de Goyave et de Java 8, il est trivial et rapide:
La première calcule le nombre de comptes à l'aide d'une sorte de hachage de la carte. Le reste est plus qu'évidente.
Quelque chose comme cela pourrait simuler le multiset:
OriginalL'auteur maaartinus
Étant donné que vous pouvez le faire en parcourant la liste qu'une seule fois, je ne voudrais pas vous soucier de la performance de trop. Si vous recherchez plus performant que les solutions alors vous finirez probablement sur-complique le code et à la lisibilité et la maintenabilité va en souffrir. À la fin de la journée, si vous souhaitez consulter la liste complète des doublons ensuite, vous avez à visiter chaque élément.
Je conseille d'écrire la solution la plus évidente et de voir comment il se comporte. Vous serez probablement surpris de voir à quelle vitesse Java pouvez parcourir une liste, même si elle est particulièrement grande.
OriginalL'auteur ATG
Voici ma version de la solution:
Il ajoute des numéros de 0 à 9 pour une liste, et cela ajoute à une autre liste de ce qui est en "duplicate" (un numéro de suivi par le même nombre). Vous pouvez utiliser votre grande liste à la place de mon randomNumbers ArrayList.
3, 1, 3
(pas de doublons trouvé!!!) et1, 2, 3
(crash!) et1, 1, 1
(quatre fois1
seront signalés dans la liste en double!).Vous avez raison. Les nombres aléatoires sont juste une façon que j'ai trouvé pour remplir la liste avec des informations aléatoires (en Donnant le fait que je ne sais pas comment sa liste).
OriginalL'auteur Ericson Willians