Мне нужно создать метод Merge для объединения двух списков (массивные списки). Мой метод работает, но теперь мне нужно изменить свой метод на дженерики. Это мой метод без дженериков, и он работает. Но у меня есть проблемы с преобразованием его в дженерики.Дженерики в Java, метод слияния
public OrderedArrayList merge(OrderedArrayList list2){
OrderedArrayList result = new OrderedArrayList(length + list2.length);
int list1Index = 0;
int list2Index = 0;
for (int i = 0; i < result.maxSize; i++) {
if (list1Index == list.length) {
result.insert(list2.list[list2Index]);
list2Index++;
} else if (list2Index == list2.length) {
result.insert(list[list1Index]);
list1Index++;
} else if (list[list1Index] < list2.list[list2Index]) {
result.insert(list[list1Index]);
list1Index++;
} else {
result.insert(list2.list[list2Index]);
list2Index++;
}
}
return result;
}
Это моя попытка преобразовать вышеуказанное сообщение в generics.
public <T extends Comparable<T> > OrderedArrayList1<T> merge(OrderedArrayList1<T> list2){
OrderedArrayList1 result = new OrderedArrayList1(length + list2.length);
int list1Index = 0;
int list2Index = 0;
for (int i = 0; i < result.maxSize; i++) {
T temp = list[list1Index];
T temp1 = list[list2Index];
if (temp.compareTo(temp1) == 0) {
result.insert(list2.list[list2Index]);
list2Index++;
} else if (temp1.compareTo(temp)==0) {
result.insert(list[list1Index]);
list1Index++;
} else if (temp.compareTo(temp1) < 0) {
result.insert(list[list1Index]);
list1Index++;
} else {
result.insert(list2.list[list2Index]);
list2Index++;
}
}
return result;
}
Существует много ошибок и не выполняется или работает. Это одна из ошибок, которые я продолжаю получать: Ошибка: несовместимые типы: T не может быть преобразован в T
Спасибо.
Не используйте необработанные типы в своей общей версии. – Savior
Просьба дать объявление вашего класса 'OrderedArrayList1' - в частности, какие переменные типа объявляются на уровне класса. –
Примечание: вам не нужно продолжать оценивать 'temp.compareTo (temp1)' - хранить результат в переменной и использовать это. Кроме того, сравнение * должно быть антисимметричным, поэтому 'temp.compareTo (temp1)' должно быть таким же, как 'temp1.compareTo (temp)'. –