Java 如何递归地从泛型列表中获取范围内的所有元素?

Java 如何递归地从泛型列表中获取范围内的所有元素?,java,list,generic-list,divide-and-conquer,generic-type-argument,Java,List,Generic List,Divide And Conquer,Generic Type Argument,给定一个泛型类型列表(List)和两个泛型类型对象:a、b: -设计一个算法,返回一个包含原始列表中属于[a,b]范围的每个元素的列表 -算法必须包括比较器E -解决方案必须是“分而治之”算法 这就是我想到的: 私有静态列表Dominio(列表a、E a、E b){ 返回dominiauAX(lista,a,b,0,lista.size()-1); } 私有静态列表(列表a、ea、eb、整数i、整数j){ List res=new ArrayList(); 整数m=(j-i)/2; E pm=l

给定一个泛型类型列表(List)和两个泛型类型对象:a、b:

-设计一个算法,返回一个包含原始列表中属于[a,b]范围的每个元素的列表

-算法必须包括比较器E

-解决方案必须是“分而治之”算法

这就是我想到的:

私有静态列表Dominio(列表a、E a、E b){
返回dominiauAX(lista,a,b,0,lista.size()-1);
}
私有静态列表(列表a、ea、eb、整数i、整数j){
List res=new ArrayList();
整数m=(j-i)/2;
E pm=lista.get(m);
如果(pm==a){
多米尼加(lista,a,b,m,j);
}否则如果(pm==b){
多米尼加(lista,a,b,i,m-1);
}
如果(下午与(a)0相比){
res=DominiauAX(列表a、a、b、i、m);
}
res=列表a.子列表(i,j);
返回res;
}

问题是,当执行一个ifs时,我要么得到一个“索引越界异常”,要么得到一个“堆栈溢出错误”。

使用分治范式的一个可能的解决方案

private static <E extends Comparable<E>> List <E> DominioAux(List<E> lista, E a, E b,Integer i, Integer j){
    List<E> res = new ArrayList<>();

    if(i >= j) { //Check if the value of list[i] is in the range [a,b)
        if (lista.get(i).compareTo(a) >= 0 && lista.get(i).compareTo(b) < 0) {
            res.add(lista.get(i));
        }

        return res;
    }

    Integer m = (i + j) / 2;
    List<E> list1 = DominioAux(lista, a, b, i, m);
    List<E> list2 = DominioAux(lista, a, b, m + 1, j);

    res.addAll(list1);
    res.addAll(list2);

    return res;
}
私有静态列表x(列表a、ea、eb、整数i、整数j){
List res=new ArrayList();
如果(i>=j){//检查列表[i]的值是否在范围[a,b]内
if(lista.get(i).compareTo(a)>=0&&lista.get(i).compareTo(b)<0){
res.add(lista.get(i));
}
返回res;
}
整数m=(i+j)/2;
List list1=DOMINIAOUAX(lista,a,b,i,m);
List list2=X(lista,a,b,m+1,j);
res.addAll(列表1);
res.addAll(列表2);
返回res;
}
你的方法中的一个错误是,当计算m时,m应该是中间的,如果i和j,那么要计算它,你必须加i和j,而不是从j中减去i