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

时间:2017-12-14 06:48:53

标签: java

我有2个列表:

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
    }
}

我想获得一个子列表L=[7,9,17],而不必浏览整个列表L1

谢谢。

2 个答案:

答案 0 :(得分:4)

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

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

如果您确定L2的值是L1中的有效索引,则不需要条件:

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

答案 1 :(得分:1)

您可以将两者包装成自己的List

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);
}