Ugh, this sounds exactly like an Object Pool to me. But, then you wouldn't need to delete the Objects, instead, you would just set them to a value that you wouldn't use so they can be used again. Below is an implementation for objects (not written by me but borrowed...)
You realise when you call collectedTrash.remove(0) you're causing the entire backing array of ArrayList to be copied 1 place to the left? If it's large you're probably costing yourself a lot more than you gain from eliminating GC. Better off using a LinkedList or collectedTrash.remove(collectedTrash.size() - 1).
edit: Don't use a LinkedList because that will create another wrapper object which will get GC'd in place of the pooled object.