ArrayList和Formatter的行为不符合预期

时间:2015-04-20 09:17:37

标签: java windows arraylist formatter

我有两个Arraylists,一个包含整个对象列表,第二个包含要从第一个列表中删除的对象。

当我从第一个列表中删除对象时,当我使用Formatter将这些对象输出到文件时,没有任何内容写入该文件。但是,如果我从第一个Arraylist输出对象,而不删除任何对象,则所有这些对象都会出现在文件中。

例如: -

for(Invoice inv : tempStore)
{
  if(invoiceLines.contains(inv))invoiceLines.remove(inv);
}

//for each invoice in the ArrayList
for(Invoice invoice : invoiceLines)
{
  output.format("%"+this.spec.getLength("XXXX")+"s\t",checkString(invoice.getInvoiceDate()));}

没有输出,只是做了: -

//for each invoice in the ArrayList
for(Invoice invoice : invoiceLines)
{
  output.format("%"+this.spec.getLength("XXXX")+"s\t",checkString(invoice.getInvoiceDate()));}

给我输出信息,当手动调试应用程序时,arraylist(删除了对象的那个)确实包含对象,并且这些对象包含正确的值。这几乎就像Arraylist一旦移除了对象就失去了记忆中的指针。

有什么想法吗?不幸的是,我不能给出特定代码的方式,但是请问任何问题,我会尽力回答。该语言是Java,我在SDK中使用Java compliance 1.5。

2 个答案:

答案 0 :(得分:0)

要识别错误,您可以在删除操作中添加更多输出(作为控制台输出或使用Logger):

System.out.println("Items before removal: " + invoiceLines.size());
for(Invoice inv : tempStore)
{
  if(invoiceLines.contains(inv)) {
    invoiceLines.remove(inv);
    System.out.println("removed " + inv + ". Items left: " + invoiceLines.size());
  }    

} 

如果在一次迭代中删除了多个项目,则需要检查Invoice类的equals()和hashCode()实现。 如果您有自己的实施,请务必遵循Object.equals()-Contract

答案 1 :(得分:0)

需要在输出结束时调用

Formatter.flush()Formatter.close()