Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于java集合和泛型:_Java_List_Generics_Collections - Fatal编程技术网

关于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是否是不相交的列表
  • (b) 在Java中实现一个方法来计算L1和L2之间的差异(\)
    。L1\L2={x | x∈ L1和x∉ L2}
  • (c)您的方法的运行时复杂性是多少?辩护
  • 注意:对于这个问题,您只能使用Java集合API基本方法

    我已经回答了这两个问题,但是已经找到了问题(b)的两种可能的解决方案,因为我仍然在学习java泛型和通配符,并且还没有完全掌握这个概念

    以下是我对问题(a)的答复:

    公共静态最终布尔不相交(列表
    我知道二进制搜索提高了这个问题的性能,但它这样做是不是牺牲了它对方法输入的限制

    对于这些方法签名和列表声明,我是否正确使用了通配符


    是的。

    对于@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;
    }