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

好吧,大家来优化程序啦
两个list,都放了几百个int型数

删除连个list当中相同的数字。

求思路。

说个最容易想到的吧:
listA
listB
Java code

    Iterator<Integer> it = listA.iterator();
        while (it.hasNext()) {
            int tmp = it.next();
            if (listB.contains(tmp)) {
                listB.remove(listB.indexOf(tmp));
                it.remove();
            }
        }




有更好的方法吗?


------解决方案--------------------
放set

list l1 = new arraylist();
collections.addAll(l1,1,2,3,4,5);

list l2 = new arraylist();
collections.addAll(l1,1,6,7,4,5);

set s =new hashset();
s.addAll(l1);
s.addAll(l2);

s里就是没有重复的……
------解决方案--------------------
光从循环逻辑来说,我觉得LZ的方法已经足够好了。

有一点小改的地方。
能避免使用listB.indexOf(tmp),
把listB.remove(listB.indexOf(tmp));
改成
listB.remove((Object) tmp);
应该可以提高点效率。

当然使用泛型更直观。

Java code

        List<Integer> listA = new ArrayList<Integer>();
        List<Integer> listB = new ArrayList<Integer>();

        listA.add(1);
        listA.add(2);
        listA.add(3);

        listB.add(2);
        listB.add(3);
        listB.add(6);

        Iterator<Integer> it = listA.iterator();
        while (it.hasNext()) {
            int tmp = it.next();
            if (listB.contains(tmp)) {
                listB.remove(new Integer(tmp));
                it.remove();
            }
        }

------解决方案--------------------
楼主不知道想没想过重复的现像怎么办。
比如你的LISTA里面有两个2,LISTB中有一个。2
你的第一次循环会删掉A的1个2.和B的2.
那到第二个2怎么办。