İki listeyi (Array Tabanlı Listeler) birleştirmek için bir Birleştirme yöntemi oluşturmalıyım. Benim yöntemim işe yarıyor, ama şimdi yöntemimi jeneriklerle değiştirmem gerekiyor. Bu benim jenerik olmayan yöntemim ve işe yarıyor. Ama ben onu jeneriklere dönüştürmek için sıkıntı yaşıyorum.Java'da Generikler, Birleştirme yöntemi
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;
}
Bu, yukarıdaki iletiyi jeneriklere dönüştürme girişimimdir.
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;
}
Çok sayıda hata var ve buna uymuyor veya çalışmıyor. Bu aldığım hatalardan biri: Hata: uyumsuz türler: T, T
'a dönüştürülemez. Teşekkür ederim.
Genel sürümünüzde ham türleri kullanmayın. – Savior
Lütfen "OrderedArrayList1" sınıfınızın bildirimini verin - özellikle sınıf düzeyinde hangi tip değişkenleri beyan edildi. –
Not: 'temp.compareTo (temp1)' değerini değerlendirmeye devam etmeniz gerekmez - sonucu bir değişkende saklayın ve bunu kullanın. Ayrıca, karşılaştırma * * simetrik olmayacaktır, yani 'temp.compareTo (temp1) '' temp1.compareTo (temp) 'ile aynı olmalıdır. –