Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 - Fatal编程技术网

在java中有没有一种有效的方法来搜索列表的子列表?

在java中有没有一种有效的方法来搜索列表的子列表?,java,Java,我有两份清单: L1=[2,4,7,9,14,15,17]和L2=[2,3,6] 第二个列表包含我要从第一个列表中提取的元素的索引 for(int i=0;i<L1.size();i++){ if(L2.contains(i)){ //Do sth } } for(int i=0;i循环L2,因为它包含您感兴趣的L1的所有索引: for(int i : L2) { if(i < L1.length) { //Do sth wi

我有两份清单:

L1=[2,4,7,9,14,15,17]
L2=[2,3,6]

第二个列表包含我要从第一个列表中提取的元素的索引

for(int i=0;i<L1.size();i++){
    if(L2.contains(i)){
        //Do sth
    }
}

for(int i=0;i循环L2,因为它包含您感兴趣的L1的所有索引:

for(int i : L2) {
    if(i < L1.length) {
        //Do sth with L1.get(i)
    }
}

循环L2,因为它包含您感兴趣的L1的所有索引:

for(int i : L2) {
    if(i < L1.length) {
        //Do sth with L1.get(i)
    }
}

您可以将这两项内容包装成自己的
列表

class ListComb<T> extends AbstractList<T> implements List<T> {
    private final List<T> l;
    private final List<Integer> comb;

    public ListComb(List l, List<Integer> comb) {
        this.l = l;
        this.comb = comb;
    }

    @Override
    public T get(int index) {
        return l.get(comb.get(index));
    }

    @Override
    public int size() {
        return comb.size();
    }
}

public void test(String[] args) {
    ListComb<Integer> l = new ListComb<>(Arrays.asList(2,4,7,9,14,15,17), Arrays.asList(2,3,6));
    System.out.println(l);
}
类ListComb扩展了AbstractList实现列表{ 私人最终名单l; 私人最终名单梳理; 公共列表梳(列表l,列表梳){ 这个。l=l; this.comb=comb; } @凌驾 公共T获取(整数索引){ 返回l.get(comb.get(index)); } @凌驾 公共整数大小(){ 返回comb.size(); } } 公共无效测试(字符串[]args){ ListComb l=newlistcomb(Arrays.asList(2,4,7,9,14,15,17),Arrays.asList(2,3,6)); 系统输出打印LN(l); }
您可以将这两项内容包装到自己的
列表中

class ListComb<T> extends AbstractList<T> implements List<T> {
    private final List<T> l;
    private final List<Integer> comb;

    public ListComb(List l, List<Integer> comb) {
        this.l = l;
        this.comb = comb;
    }

    @Override
    public T get(int index) {
        return l.get(comb.get(index));
    }

    @Override
    public int size() {
        return comb.size();
    }
}

public void test(String[] args) {
    ListComb<Integer> l = new ListComb<>(Arrays.asList(2,4,7,9,14,15,17), Arrays.asList(2,3,6));
    System.out.println(l);
}
类ListComb扩展了AbstractList实现列表{ 私人最终名单l; 私人最终名单梳理; 公共列表梳(列表l,列表梳){ 这个。l=l; this.comb=comb; } @凌驾 公共T获取(整数索引){ 返回l.get(comb.get(index)); } @凌驾 公共整数大小(){ 返回comb.size(); } } 公共无效测试(字符串[]args){ ListComb l=newlistcomb(Arrays.asList(2,4,7,9,14,15,17),Arrays.asList(2,3,6)); 系统输出打印LN(l); }
确保第一个列表的类型为
ArrayList
,否则通过索引访问
LinkedList
的元素与通过迭代搜索元素相同。确保第一个列表的类型为
ArrayList
,否则通过索引访问
LinkedList
的元素将是错误的与通过迭代搜索元素相同。