在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
的元素将是错误的与通过迭代搜索元素相同。