关于java集合和泛型:
我被分配了以下学校作业:关于java集合和泛型:,java,list,generics,collections,Java,List,Generics,Collections,我被分配了以下学校作业: 给出两个排序的可比项目列表,L1和L2 (a)在Java中实现一种方法来确定L1和L2是否是不相交的列表 (b) 在Java中实现一个方法来计算L1和L2之间的差异(\)。L1\L2={x | x∈ L1和x∉ L2} (c)您的方法的运行时复杂性是多少?辩护 注意:对于这个问题,您只能使用Java集合API基本方法 我已经回答了这两个问题,但是已经找到了问题(b)的两种可能的解决方案,因为我仍然在学习java泛型和通配符,并且还没有完全掌握这个概念 以下是我对问题(
给出两个排序的可比项目列表,L1和L2 (a)在Java中实现一种方法来确定L1和L2是否是不相交的列表
。L1\L2={x | x∈ L1和x∉ L2}
公共静态最终布尔不相交(列表
我知道二进制搜索提高了这个问题的性能,但它这样做是不是牺牲了它对方法输入的限制
对
对于这些方法签名和列表声明,我是否正确使用了通配符
是的。对于@shmosel,这是对(a)部分的更好回答吗
publicstaticfinal我怀疑调用Collections.disjoint()
并不是您分配的目标…这是因为Object没有实现java.lang.Compariable,对吗@shmosel@CarlosLuis正确。但是限制更进一步。您不能在列表
旁边输入列表
,因为它们彼此不可比较。
public static final <T> boolean disjoint(List<? extends T> list1, List<? extends T> list2 ){
return Collections.disjoint(list1, list2);
}
List<Float> lista = Arrays.asList(2.3f, 3.4f);
List <Object> listb = Arrays.asList("a","b","c","d", 1, 2, 3, 3.4f);
System.out.println(SetList.disjoint(list1, list9));//prints false;
public static final <T> List<? super T>
setDifference(List<? extends T> list1, List<? extends T> list2){
List<? super T> resultSet = new ArrayList<>();
for(T x : list1){
if(!list2.contains(x)){
resultSet.add(x);
}
}
return resultSet;
}
List <Object> list1 = Arrays.asList(1.2f,12f, "a","b","c","d", 1,2,3,3.4f);
List<Float> list9 = Arrays.asList(2.3f, 3.4f);
System.out.println(SetList.setDifference(list1, list9));
//Prints [1.2, 12.0, a, b, c, d, 1, 2, 3]
List<Integer> list3 = Arrays.asList(1,2,3,4,10);
List<Float> list9 = Arrays.asList(2.3f, 3.4f);
System.out.println(SetList.setDifference(list3, list9));
// this prints [1, 2, 3, 4, 10]
public static final <T extends Comparable<? super T>> List<? super T>
setDifference2(List<? extends T> list1, List<? extends T> list2){
List<T> resultSet = new ArrayList<>();
for(T x: list1){
if(Collections.binarySearch(list2, x)<0){
resultSet.add(x);
}
}
return resultSet;
}
public static final <T extends Comparable<? super T>>
boolean disjoint2(List<? extends T> list1, List<? extends T>list2){
for(T x: list1){
if(Collections.binarySearch(list2, x)>=0){
return false;
}
}
return true;
}