MergeSort implementation with java.util.List passed as argument, not returned
You could do

list.clear(); 
merge(right, left, list);


with

private static &lt;E extends Comparable&lt;E&gt;&gt; List&lt;E&gt; merge(List&lt;E&gt; source1, List&lt;E&gt; source2, List&lt;E&gt; destination) {
    // ...
    destination.add(element);
    // ...
}


The merge() function should be declared static to indicate that it doesn't use any instance variables.