Witam stworzyłem swój kod marge sorta i nie mogę dość dlaczego dubluje mi wartości. Prześledziłem go kilka razy i nie widzę błędu

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class MergeSort <T> implements Sorted<T>{
    private List<T> toSort;
    private Comparator<T> comp; // komparator naturalny zwraca -1 gdy a<b zwraca 0 gdy a==b zwraca 1 gdy a>b
    private CollectingData col; // do zbierania danych chwilowo nie używany
    private ArrayList<T> sorted=new ArrayList<T>();

    public MergeSort(String sortType, List<T> toSort,Comparator<T> comp){
            this.toSort=toSort;
            this.comp=comp;
            col=new CollectingData("MergeSort", sortType);
            doMergeSort(0,toSort.size()-1);
    }

    private void doMergeSort(int first,int last){
        int center;
        if(first<last){
            center=((first+last)/2);
            doMergeSort(first,center);
            doMergeSort(center+1,last);
            merge(first,center,last);
        }
    }

    private void merge(int first, int center, int last){
        int i=first;
        int j=center+1;
        int start=first;
        while(i<=center && j<=last){
            if(comp.compare(toSort.get(i), toSort.get(j))<0){
                sorted.add(start++,toSort.get(i++));
            }
            else{
                sorted.add(start++,toSort.get(j++));
            }
        }
        while (i<=center){
            sorted.add(start++,toSort.get(i++));
        }
    }

    @Override
    public List<T> getSorted() {
        // TODO Auto-generated method stub
        return sorted;
    }
}

metoda do sprawdzania

public class UnitTest {
    public static void main(String args[]){
        MergeSort<Integer> sort;
        ArrayList<Integer> tosort=new ArrayList<>();
        Comparator<Integer> comp=new MyComparator<Integer>();
        int tab[]={8,7,6,5};
        for (Integer i:tab){
            tosort.add(i);
        }

        sort=new MergeSort<Integer>("Best",tosort,comp);
        tosort=(ArrayList<Integer>)sort.getSorted(); // tak wiem nadpisuję listę ale to nie wpływa na wynik
        for(Integer i:tosort){
            System.out.println(i);
        }
    }
}

Bardzo dziękuję za pomoc :)