A more efficient enqueue algorithm in Java
It seems like what you are trying to accomplish here is to make your Queue class immutable. That in itself is good, but there are a couple of issues with your approach:


Creating a new class for this is not needed. There already exists classes for that. Use Collections.unmodifiableList to create one.
Your class does not implement the List interface (or the Queue interface for that matter). I guess there is a way to access the embedded List&lt;T&gt; such as getList hidden among "some constructors and helper functions", but if all that does is to return this.body; then your entire list is still accessible and modifiable.
The List&lt;T&gt; body field could be, and should be, declared final.


Instead of your entire Queue class, you might want to use this static method:

public static &lt;E&gt; List&lt;E&gt; addToList(List&lt;E&gt; oldList, E newElement) {
    List&lt;E&gt; temp = new ArrayList&lt;E&gt;(oldList);
    temp.add(newElement);
    return Collections.unmodifiableList(temp);
}


I should add however, that there is a difference between an unmodifiable list and what I understood about your approach. An unmodifiable list in Java does not allow any change to the list at all, such as list.set(index, obj).