2017-10-15 50 views
0

是否以任何方式修改已经添加到队列中的对象? (例如,让我们假设我想实现一个具有事务列表的FIFO队列)我不想/不需要更改队列中事务的顺序,我只想更新一些数量,并且如果可用数量已用尽来自队列的交易。我已经检查了peek/deque等,但是这似乎并不能提供想要的行为修改已排队的数据java

+1

如果你已经有了对你想要修改的对象的引用,它也会在队列中被修改,因为队列将引用同一个对象。如果您不这样做,那么您需要提供一种方法来查找和访问队列中的特定对象。在Java中实现'Queue'接口的'Collection'将允许您使用它的'Iterator'实现来搜索'Queue'。 –

+0

是的,有一个自定义的实现可能是要走的路,因为有引用是不可能的.thx – jcuypers

回答

1

显然我犯了一个错误。似乎可以通过偷看并修改内容来获取对象的引用。

例如

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

正如我只需要在一个FIFO方式,以适应数量 并移动到下一个交易如果数量不够它解决了我的需要。为了更高级的使用(数据中的随机变化),你确实可以建立自己的。谢谢

0

在java中,每个抛出对象的变量实际上只持有对该对象的引用。所以,如果你仍然有你的对象,你可以编辑它。例如:

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