我收到此错误,“首选项类型中的方法 mergeSort(java.util.ArrayList) 不适用于我的代码中的参数 (java.util.ArrayList)Java(67108979)”(我将在下面粘贴)。但对我来说,它看起来像是完全相同的方法,所以我对哪里出了问题感到困惑。
错误出现在我尝试调用mergeSort的两行preferenceSimilarity中
import java.util.*;
public class Preferences<T>{
//Combine the two ArrayLists
private ArrayList<T> merge(ArrayList<T> left, ArrayList<T> right){
ArrayList<T> result= new ArrayList<T>();
int i=0; int j=0;
while ((i< left.size()) && (j<right.size())){
if (left.get(i).equals(right.get(j))){
result.add(left.get(i));
i++;
j++;
}
else if(left.get(i).hashCode()< right.get(j).hashCode()){
i++;
}
else{
j++;
}
}
return result;
}
//MERGE SORT
public ArrayList<T> mergeSort(ArrayList<T> list1){
if (list1.size()<=1){
return list1;
}
int mid= list1.size()/2;
ArrayList<T> left= new ArrayList<T>(list1.subList(0,mid));
ArrayList<T> right = new ArrayList<T>(list1.subList(mid,list1.size()));
left= mergeSort(left);
right= mergeSort(right);
return merge(left, right);
}
public static <T> double preferenceSimilarity(ArrayList<T> list1, ArrayList<T> list2){
** ArrayList<T> sorted1= mergeSort((ArrayList<T>) list1); //INCOMPATIBLE TYPES??
ArrayList<T> sorted2= mergeSort((ArrayList<T>) list2);**
double similarity= 0.0;
int i=0;
int j=0;
while (i < sorted1.size() && j < sorted2.size()) {
if (sorted1.get(i).equals(sorted2.get(j))) {
similarity++;
i++;
j++;
} else if (sorted1.get(i).hashCode() < sorted2.get(j).hashCode()) { //HashCode returns integer value
i++;
} else {
j++;
}
}
double totalLen= Math.max(sorted1.size(),sorted2.size());
return (similarity/totalLen);
}
}
我试着对它们进行类型转换,但什么也没做。我还尝试切换我的参数类型,但这没有用,因为我需要我的解决方案来处理泛型类型。