1
2つのリスト(アレイベースのリスト)をマージするには、マージメソッドを作成する必要があります。私の方法は機能しますが、今では私のメソッドをジェネリックに変更しなければなりません。これはジェネリック医薬品のない私の方法であり、それは機能します。しかし、私はジェネリック医薬品に変換するのに困っている。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;
}
これは、上記のメッセージをジェネリックに変換しようとした私の試みです。
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;
}
多くのエラーがあり、準拠していないか、動作していません。これは私が得るエラーの1つです: エラー:互換性のないタイプ:TをTに変換できません
ありがとうございます。
class OrderedArrayList1<T extends Comparable<T> > {
public OrderedArrayList1<T> merge(OrderedArrayList1<T> list2) {
...
}
}
そうでない場合、あなたは少し不可解したがって、単に同じ名前を持つように起こるさまざまな型の変数を定義している:あなたが方法でそれを削除し、クラスレベルで<T extends Comparable<T> >
を宣言していると仮定すると、
ジェネリック版では、未加工の種類は使用しないでください。 – Savior
'OrderedArrayList1'クラスの宣言、具体的にはクラスレベルで宣言されている型変数を与えてください。 –
注: 'temp.compareTo(temp1)'を評価し続ける必要はありません。結果を変数に格納し、それを使用してください。また、比較*は対称でなければならないので、 'temp.compareTo(temp1)'は 'temp1.compareTo(temp)'と同じでなければなりません。 –