有两个List<String> list1和list2,List的每个元素由字母和汉字组成。list1有的元素,list2一定有;list2有的元素,list1不一定有。(相当于list2是在list1的基础上,多了几个元素)。现在想把list2比list1多的这些元素查找出来。示例:list1={a1,b1,b2,c1},list2={a1,a2,b1,b2,c1,c2}。结果应为:a2,c2本人算法底子不行,只能写出最基本的算法,效率不高。请问大家有什么好的算法吗?多谢指教!

解决方案 »

  1.   

    这个是工作中的问题,list1和list2的长度一般为几千个,list2比list1多20个左右。
      

  2.   


    Collections.sort(list1);
    Collections.sort(list2);
    然后
    list2.removeAll(list1);
      

  3.   

    jdk提供有现成的方法
    list2.removeAll(list1);
    然后你再打印一下list2  里面就只有a2,c2了
      

  4.   

    类似这样的, list2.retainAll(list1); 再打印list2,里面就是list1和list2的交集a1,b1,b2,c1
      

  5.   

    用jdk提供的方法,效率应该挺高的
      

  6.   

    如果想简单的话,
    那么就直接list1.removeAll(list2);
    如果想研究算法:
    目前想到的办法只有遍历list1
    判断list1中的元素在list2中是否存在。
      

  7.   


    如果使用API的话,removeAll是不错的选择。研究算法,就需要看一下具体的实现了。
      

  8.   

    严谨点的想法:用removeAll(List)的方法,队列里的对象比较就要实现下
      

  9.   

    方便一点的是list1.removeAll(list2);
    还有那个CollectionUtils.subtract(List list1, List list2 );