2017-10-15 13 views
0

Est-il possible de modifier les objets déjà ajoutés dans une file d'attente? (Supposons que je veux implémenter une file FIFO avec une liste de transactions) Je ne veux pas/besoin de changer à l'ordre des transactions dans la file d'attente, je veux seulement mettre à jour certaines quantités et si la quantité disponible est épuisée la transaction de la file d'attente. J'ai vérifié peek/deque etc. mais cela ne semble pas fournir le comportement voulumodifier les données qui ont déjà été mises en file d'attente java

+1

Si vous avez déjà une référence à l'objet que vous voulez modifier, il sera également modifié dans la file d'attente, car la file d'attente référencera le même objet. Si vous ne le faites pas, vous devez fournir un moyen de rechercher et d'accéder à des objets spécifiques dans votre file d'attente. Un 'Collection' implémentant l'interface' Queue' en Java vous permettra de rechercher dans la 'Queue' en utilisant son implémentation 'Iterator'. –

+0

oui avoir une implémentation personnalisée pourrait être la voie à suivre, comme ayant des références serait peu probable.thx – jcuypers

Répondre

1

Apparemment, j'ai fait une erreur. Il semble être possible d'obtenir une référence à l'objet par le biais de peek et de modifier le contenu.

par exemple.

Queue<Transaction> bought_fifo = new LinkedList<Transaction>(); 
Transaction tr2 = bought_fifo.peek(); 
tr2.setPrice(new BigDecimal(1000000000L)); 

Comme je l'ai seulement besoin d'adapter les quantités d'une manière FIFO et passer à la prochaine transaction si la quantité ne suffit pas, il résout mon besoin. pour une utilisation plus avancée (changements aléatoires dans les données), vous pourriez en effet créer votre propre. merci

0

En java chaque variable qui enferme un objet contient seulement une référence à cet objet. Donc, si vous avez toujours votre objet quelque part, vous pouvez le modifier. Exemple:

Object test= new Object(); 

ArrayList<Object> list =new ArrayList(); 

list.add(test) 

//if you change the object test now and then take the object from the list it will be changed