Comment pop des éléments d'une collection en Java?
Est-il une méthode dans le JDK ou apache commons pour "pop", une liste des éléments à partir de java.util.Liste? Je veux dire, supprimer la liste des éléments et de la retourner, à l'instar de cette méthode:
public Collection pop(Collection elementsToPop, Collection elements) {
Collection popped = new ArrayList();
for (Object object : elementsToPop) {
if (elements.contains(object)) {
elements.remove(object);
popped.add(object);
}
}
return popped;
}
- Notez que vous pouvez tester le résultat de supprimer() et passez de l'contient vérifier dans votre code.
- Vous pouvez également regarder dans génériques pour travailler avec les collections.
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à la recherche d'un pile-comme la structure, je suggère d'accepter un
Deque
(LinkedList
est la plus commune de mise en œuvre) au lieu d'unCollection
.Si vous n'avez pas besoin de la traiter comme une pile, juste obtenir un itérateur de la
Collection
et l'utilisation de laremove()
méthode:Noter que supprimer est une option de fonctionnement, et certaines implémentations peuvent jeter un
UnsupportedOperationException
(par exemple, l'itérateur renvoyé par une Collection deCollections.unmodifiable...()
va).Modifier: Après avoir regardé de plus près à votre question, je pense que vous avez juste besoin de ceci:
Si votre principal point est que vous devez savoir exactement qui éléments ont été effectivement sauté, je pense que vous êtes coincé avec votre code d'origine.
Il n'existe pas de méthode standard JDK fourni par les méthodes. Apache Commons fournit le
ListUtils.soustraire()
méthode.Edit: Comme d'autres answerers l'avons noté, de votre utilisation du terme
pop
est non standard. Généralement,Wikipédia a un belle description de piles.
Je suppose que non, parce que vous la définition de " pop " de l'opération est hautement non-standard. Habituellement, il ne prend pas d'arguments (à l'exception de la collection elle-même) et des retours et enlève le haut-plus.
Mais une fois que vous avez noté apache commons, cela permettrait d'obtenir le même effet que votre code.
modifier
http://commons.apache.org/collections/api-release/index.html
Liste liée fournit les fonctionnalités que vous avez besoin, fournit un push et pop méthode.
Reportez-vous à la la documentation comme prévu:
Il n'y a pas une méthode exactement comme ce que vous demandez, mais on dirait que vous êtes déjà assez proche avec votre code.
Quelques suggestions:
Envisager l'utilisation de removeAll(objet) au lieu de supprimer(objet) si des éléments est une collection arbitraire puisque vous devrez peut-être supprimer les doublons par exemple, si des éléments d'une liste.
contient() est lent pour certains types de collection (par exemple, des listes), car il doit parcourir l'ensemble de la structure de données. Étant donné que c'est dans votre boucle, vous êtes à risque de O(n^2) les problèmes de performances. Si vous pouvez faire l'algorithme de travail avec un HashSet ou table de hachage contient alors() par O(1) et votre algorithme sera beaucoup plus efficace.