This isn't necessary something that can be answered in general, as it depends on how the objects can be copied.
Supposing that the object has a method called copyOf that returns a copy of the object, you would need to do
ArrayList<Stuff> copy = new ArrayList<Stuff>(originallist.size());
for (Stuff s : originallist) {
copy.add(s.copyOf());
}
There are many places that the "copyOf" function may come from. If an object implements the cloneable interface, that may be a source of this function (but there are various reasons that the interface is discouraged). Some classes contain a constructor that creates a copy from an existing instance, in which case you could do
ArrayList<Stuff> copy = new ArrayList<Stuff>(originallist.size());
for (Stuff s : originallist) {
copy.add(new Stuff(s));
}
in other cases, it may have to be done with an approach accessing fields (for example with a Person object that keeps a first and last name)
ArrayList<Person> copy = new ArrayList<Person>(originallist.size());
for (Person s : originallist) {
copy.add(new Person(s.getFirstName(),s.getLastName()));
}
To be certain of how to do it, you should look at the api guides to the "Stuff" object. The actual copying of the List itself, is easy.