Почему возникает Ошибка ПРИВЕДЕНИЯ ТИПОВ в строке
return (Integer[]) list.toArray();
public class Solution {

    public static void main(String[] args) {
        Integer[] arr = new Integer[]{13, 8, 15, 5, 17};
        for(Integer i:sort(arr)){
            System.out.println(i);
        }
    }

    public static Integer[] sort(Integer[] array) {
        ArrayList<Integer> list = new ArrayList<>(Arrays.asList(array));
        Collections.sort(list);
        double mediana;
        if (list.size()%2!=0) mediana = list.get(list.size()/2);
        else mediana = ( list.get(list.size()/2) + list.get(list.size()/2-1) )*(1.0)/2;

        Comparator<Integer> compAbs = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                double d1 = Math.abs(o1-mediana);
                double d2 = Math.abs(o2-mediana);
                return (d1 - d2)<0?-1:d1-d2==0?0:1;
            }
        };

        Collections.sort(list,compAbs);

        return (Integer[]) list.toArray();
    }
}
А вот в этом примере Ошибки НЕТУ!!! Почему ее во втором примере нет, а впервом есть. Мы же в обеих случаях делаем ОПЕРАЦИЮ ПРИВЕДЕНИЯ К ТИПУ (Integer[])
public class Main {
    public static void main(String[] args) {
       List<Integer> wordsList = Arrays.asList(1,2,3,4);
        Integer[] wordsArray = (Integer[]) wordsList.toArray();

        for (Integer word : wordsArray) {
            System.out.println(word);
        }

    }
}