2014-01-07 3 views
0

Я пытаюсь написать общий метод mergesort, который будет работать как для массивов, так и для arraylists, но я не уверен, возможно ли это, учитывая, что две структуры имеют разные методы/синтаксис добавления/извлечения элементов.Общий метод, который может принимать как массивы, так и arraylists

+2

Перегрузка звучит подобно вашему джем. – duffymo

+0

Невозможно это сделать без перегрузки, потому что этот вид побеждает всю цель универсальности метода. – manis

+0

@Tarlen Это не побеждает цель вообще - наоборот, это опрятный способ ее достижения. – berry120

ответ

3

Я бы просто написал метод, чтобы взять список, а затем написать второй метод, который принимает массив, который делегирует первый метод. Если вы используете Arrays.asList, любые изменения, внесенные в список, должны быть записаны в исходный массив.

public <T> void mergeSort(T array []) { 
    mergeSort(Arrays.asList(array)); 
} 

public <T> void mergeSort(List<T> list) { 
    // do sort here 
} 
+0

Но мое задание - написать один метод – manis

+0

Нет никакого реального значения для создания единственного метода. В коде выше код CODE не дублируется, что является важной частью. –

2

Вы не можете написать один конкретный метод, который сортирует как эти точно так же, но вы можете написать один метод, который перегружает и делегатов на другой:

public void mergeSort(List<Integer> list) { 
    Integer[] arr = list.toArray(new Integer[list.size()]); 
    mergeSort(arr); 
    list.clear(); 
    for(int num : arr) { 
     list.add(num); 
    } 
} 

public void mergeSort(Integer[] arr) { 
    //Actual sorting logic 
} 

Вы не можете сделать это одним способом, если вы не скажете ему принять Object и начать бросать исключения, если это неправильный тип, который, очевидно, не является практикой на практике!

+0

@ ZouZou Doh, извините. Исправлена. – berry120

+0

Я также не думаю, что это сработает, потому что изменения в массиве не будут записаны в список поддержки. Когда вы вызываете list.toArray, вы получаете мелкую копию. –

+0

@mattforsythe Извините, еще один момент замораживания мозга ... исправлено. – berry120

Смежные вопросы