使用其他列表中的索引删除存储在列表中的一些元素

时间:2013-03-13 22:58:25

标签: list arraylist

问:使用其他列表中的索引删除列表中存储的一些元素?例如。     列表1有a,b,c,d,e,列表2有0,2则应删除a和c。

我已经完成了这个,不知道这是多么高效的效果

public class RemoveByIndexFromOtherList {

    public static void main(String[] args) {
        List<String> lOriginal = new ArrayList<String>();
        lOriginal.add("a");
        lOriginal.add("b");
        lOriginal.add("c");
        lOriginal.add("d");
        lOriginal.add("e");

        List<Integer> indexes = new ArrayList<Integer>();
        indexes.add(0);
        indexes.add(2);
        List<String> elemToRemove = new ArrayList<String>();

        for (Integer index : indexes) {
            String b = lOriginal.get(index.intValue());
            elemToRemove.add(b);
        }

        for (String s : lOriginal) {
            if (elemToRemove.contains(s)) {} 
            else {
                System.out.println(s);
            }
        }
    }
}

请建议,如何将其改进到公平有效的水平

1 个答案:

答案 0 :(得分:0)

不确定您是否仍需要答案/建议。

您可以创建新列表并添加第二个列表中不存在的索引,而不是删除。然后只需更改参考。在您的情况下,如果列表中有多个“a”,则所有这些都将被删除。

建议:

import java.util.ArrayList;
import java.util.List;

public class RemoveByIndexFromOtherList {

    public static void main(String[] args) {
        List<String> lOriginal = new ArrayList<String>();
        lOriginal.add("a");
        lOriginal.add("b");
        lOriginal.add("c");
        lOriginal.add("d");
        lOriginal.add("e");
        lOriginal.add("a");

        List<Integer> indexes = new ArrayList<Integer>();
        indexes.add(0);
        indexes.add(2);

        List<String> newListOriginal = new ArrayList<String>();

        for(int i = 0; i<lOriginal.size(); i++){
            if(!indexes.contains(i)){
                newListOriginal.add(lOriginal.get(i));
            }           
        }
        lOriginal = newListOriginal;

        for(String str: lOriginal){
            System.out.println(str);
        }

    }
}