Когда использовать Comparable [] в Java? - PullRequest
0 голосов
/ 23 марта 2019

Я наблюдал за кодом, который использовал Comparable[] в качестве массива, который точно работает как список фреймворка коллекции. Поскольку задача была выполнена легко, используя ее без слишком большого количества циклов, это хорошая практика - использовать ее для других типов данных?

public class MergeSortExample {

public Comparable[] mergeSort(Comparable[] inputList) {
    if(inputList.length <= 1) {
        return inputList;
    }
    Comparable[] list1 = new Comparable[inputList.length/2];
    Comparable[] list2 = new Comparable[inputList.length - list1.length];
    System.arraycopy(inputList, 0, list1, 0, list1.length);
    System.arraycopy(inputList, list1.length, list2, 0, list2.length);

    mergeSort(list1);
    mergeSort(list2);

    merge(list1, list2, inputList);
    return inputList;
}

public void merge(Comparable[] list1, Comparable[] list2, Comparable[] resultList) {
    int indexOfList1 = 0;
    int indexOfList2 = 0;
    int indexOfMergedList = 0;

    while(indexOfList1 < list1.length && indexOfList2 < list2.length) {
        if(list1[indexOfList1].compareTo(list2[indexOfList2]) < 0) {
            resultList[indexOfMergedList] = list1[indexOfList1];
            indexOfList1++;
        }else {
            resultList[indexOfMergedList] = list2[indexOfList2];
            indexOfList2++;
        }
        indexOfMergedList++;
    }
    System.arraycopy(list1, indexOfList1, resultList, indexOfMergedList, list1.length - indexOfList1);
    System.arraycopy(list2, indexOfList2, resultList, indexOfMergedList, list2.length - indexOfList2);
}

}

1 Ответ

1 голос
/ 23 марта 2019

В старые времена перед генериками в коллекциях можно было использовать только Object, и они не были безопасными для типов.Массивы всегда были типобезопасными.В те дни было принято использовать массивы по этой причине.В современном коде я обычно предпочитаю использовать список в общем коде, но с массивами все в порядке.Коллекции реализованы с использованием массивов внутри, и иногда массив - это то, что вам нужно.Трудно дать лучший ответ, не видя больше вашего кода!

...