从LinkedList中删除行



在我的anylogic模型中,我想在队列块进入时将orderID、处理时间和到期日期添加到列表中。这很好。现在我想在订单离开队列的那一刻从列表中删除此信息,因此在退出时,但是我无法使其工作。

我有以下内容:

class ExportInfo {
private int id;
private int P;
private double d;
public ExportInfo(int id, int P, double d) { 
this.id=id;
this.P=P;
this.d=d;
}
}
LinkedList<ExportInfo> list = new LinkedList();

在我的队列块上输入:

new ExportInfo(agent.atrID, agent.atrEstimatedPackingTime, dateToTime(agent.atrDueDate));
list.add(new ExportInfo(agent.atrID, agent.atrEstimatedPackingTime, dateToTime(agent.atrDueDate)));

在退出:

new ExportInfo(agent.atrID, agent.atrEstimatedPackingTime, dateToTime(agent.atrDueDate));
list.remove(new ExportInfo(agent.atrID, agent.atrEstimatedPackingTime, dateToTime(agent.atrDueDate)));

在某个时候,我将结果写入一个Excel文件。如果我只将信息添加到列表中,我首先检查了结果。在Excel文件中,我看到了输入的所有订单信息(假设是6)。

然后我也尝试了remove,这意味着在信息被写入Excel的那一刻,它应该只包含没有离开队列的订单的信息(因为在这种情况下,他们的信息应该从列表中删除)。在我将信息写入Excel文件时,我可以看到队列中有4个订单,但是进入队列的所有6个订单的信息仍然存在,因此离开队列的2个订单的信息没有被删除。

有谁知道我怎么解决这个问题吗?

您不断地添加和删除ExportInfo的新实例,这是没有意义的。

在进入时在队列块中添加一次条目。另外,将ExportInfo作为变量myExportInfo存储在实际代理中,以便它在队列退出之前记住它。

在Queue exit中,您希望更改ExportInfo对象中的退出时间,但不创建新的退出时间。因此,使用setter设置队列退出时间,如agent.myExportInfo.setExitTime(...)

这将为您提供通过队列

的所有代理的完整列表。

remove将找不到对象,因为您构造了一个对象,因此该对象尚未在列表中。

你应该:

  1. 保留对添加时创建的对象的引用,并在调用remove时使用该引用。

  2. (效率较低:)迭代列表并寻找具有您正在寻找的属性的对象,然后删除它。

相关内容

  • 没有找到相关文章

最新更新