我有两个 Arraylist,一个包含整个对象列表,第二个包含要从第一个列表中删除的对象。
当我从第一个列表中删除对象并使用格式化程序将这些对象输出到文件时,不会向该文件写入任何内容。但是,如果我从第一个 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 一样,一旦对象被删除,就会丢失内存中的指针。
有什么想法吗?不幸的是,我无法提供太多具体代码,但是提出任何问题,我会尽力回答。该语言是 Java,我在 SDK 中使用 Java 合规性 1.5。
最佳答案
要识别错误,您可以在删除操作中添加更多输出(作为控制台输出或使用记录器):
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 .
关于java - ArrayList 和 Formatter 的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743762/