9
votes

Comment faire apparaître des objets d'une collection en Java?

Y a-t-il une méthode dans JDK ou Apache Commons à "Pop" une liste d'éléments d'une java.Util.List? Je veux dire, supprimer la liste des éléments et le renvoyer, comme cette méthode: xxx


2 commentaires

Notez que vous pouvez tester le résultat de Supprimer () et ignorez la vérification de la conception dans votre code.


Vous voudrez peut-être aussi regarder Generics pour travailler avec des collections.


5 Réponses :


11
votes

Si vous recherchez une structure semblable à la pile, je suggère d'accepter un deque code> ( LinkedList code> est la mise en œuvre la plus courante) au lieu d'une collection Code>.

Si vous n'avez pas besoin de le traiter comme une pile, obtenez simplement un itérateur de la collection code> Utilisez le Supprimer () Code> Méthode:

elements.removeAll(elementsToRemove);


2 commentaires

En fait, il semble que je n'ai pas lu assez étroitement. Vous avez une définition très non standard de «pop» qui me trompe pour poster cette réponse. Réponse plus applicable à venir.


Je sais que "pop" n'était pas le meilleur mot à utiliser, alors j'ai donné un exemple de ce que je voulais. Mais on dirait qu'il n'y a pas de méthode comme celle-ci implémentée pour JDK ou Apache Commons, donc, à l'heure actuelle, vous continuerez avec le mien et j'utiliserai votre itérateur d'indice, merci!



1
votes

Je suppose que non, parce que vous définissez une opération «pop» est très standard. Il ne faut généralement aucun argument (sauf la collecte elle-même) et renvoie et supprime le plus haut.

Mais une fois que vous avez noté Apache Commons, cela obtiendrait le même effet que votre code. xxx

edit
http://commons.apache.org/collections/api-release/index. HTML


0 commentaires

0
votes

Il n'y a pas de méthode exactement comme ce que vous demandez, mais on dirait que vous êtes déjà assez proche de votre code.

Quelques suggestions:

  • envisagez d'utiliser RemoveAll (objet) au lieu de supprimer (objet) si des éléments sont une collection arbitraire puisque vous devrez peut-être supprimer des doublons par exemple. Si des éléments est une liste.

  • contient () est lent pour certains types de collecte (E.G. listes) car il doit parcourir toute la structure de données. Étant donné que cela se trouve dans votre boucle intérieure, vous êtes à risque de problèmes de performance O (N ^ 2). Si vous pouvez faire fonctionner l'algorithme avec un hashset ou un hashmap, il contient () Will By O (1) et votre algorithme sera beaucoup plus efficace.


0 commentaires

2
votes

Il n'y a pas de méthode de ce type dans les méthodes standard fournies JDK. Apache Commons fournit le listutils.subrer () méthode .

Edit: Au fur et à mesure que d'autres interrogateurs ont noté, votre utilisation du terme pop est non standard. Habituellement,

L'opération POP supprime un élément du haut de [une pile]

wikipedia a un Nice description des piles .


2 commentaires

+1 pour soustraire; RemoveAll ne respecte pas la cardinalité comme l'extrait de l'affiche. Mais cela ne vous réserve pas une liste d'éléments qui ont été supprimés comme celui-ci.


@Mark, hm, tu as raison; J'ai lu la description mais pas la source et mal comprise. +1, je vais continuer à chercher.



1
votes

La liste liée fournit la fonctionnalité à votre disposition, fournit une méthode PUSH et POP.

Reportez-vous au Documentation comme prévu :


0 commentaires