日期:2014-05-20  浏览次数:20957 次

求高效算法:ArrayList中删除另外一个ArrayList中存在的对象。
如题,有两个List:
Java code

List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        list1.add("5");

        list2.add("1");
        list2.add("3");
        list2.add("5");


现在要将list1中的1,3,5删除,要求效率越高越好。

我自己写了个,感觉效率很差!
Java code

public static void main(String[] args) {
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.add("4");
        list1.add("5");
        
        list2.add("1");
        list2.add("3");
        list2.add("5");
        
        boolean restart = false;
        int i =0;
        out:
        for( ;i<list1.size();){
            int j=0;
            for(;j<list2.size();j++){
                if(list1.get(i).equals(list2.get(j))){
                    list1.remove(list1.get(i));
                    restart = true;
                    break;
                }
            }
            if(j == list2.size()){
                restart = false;
            }
            if(restart){
                i = 0;
                continue out;
            }else{
                i++;
            }
        }
    }



------解决方案--------------------
重写一下Person类的equals方法,改成当和其他类比较时,只要name相同就返回true.
 再同样的removeAll应该就可以了... LZ不妨试试.
------解决方案--------------------
探讨

8L能给个列子吗