有ListString list1和ListString list2,两个集合各有上万个元素

有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样高效取出两个集合中不同的元素?

如题:要实现高效的遍历list,那么通过map实现为最佳算法,以下是实现思路:

* 1、用map存放list1和list2的所有元素,key为2个list的元素,value为元素出现的次数 * 2、在遍历2个list时,如果有相同的元素,则value++,网站空间,如果没有,则直接添加到no_list * 3、最后遍历map,香港空间,取出value为1的元素,添加到no_list

代码如下:

Main { args main(String[] args) { 7List<String> list1=new ArrayList<String>(); 8List<String> list2=new ArrayList<String>();(int i=0;i<10000;i++){11list1.add(i+”test”);12list2.add(i*2+”test”);13 }1415 getNoList(list1,list2);16 }List<String> getNoList(List<String> list1,List<String> list2){19long begin=System.currentTimeMillis();20List<String> no_list=new ArrayList<String>();* 实现思路:24 * 1、用map存放list1和list2的所有元素,香港空间,key为2个list的元素,value为元素出现的次数25 * 2、在遍历2个list时,如果有相同的元素,则value++,如果没有,则直接添加到no_list26 * 3、最后遍历map,取出value为1的元素,添加到no_listMap<String,Integer> map=new HashMap<String, Integer>();29List<String> max_list=list2;30List<String> min_list=list1;(list1.size()>list2.size()){33max_list=list1;34min_list=list2;35 }* 再进行2个list遍历时,优先遍历size最长的list,提高性能(int i=0;i<max_list.size();i++){41map.put(max_list.get(i), 1);42 }(int i=0;i<min_list.size();i++){45String key_str=min_list.get(i);46Integer count=map.get(key_str);47if(count!=null){48map.put(key_str, count++);49continue;50 }* 这步很重要,在遍历第2个list时,由于第1个list已经遍历完毕,故在count为null时53 * 说明该元素为2个list的不同元素,可直接添加到no_list,大大提高性能no_list.add(key_str);56 }(Map.Entry<String, Integer> entry:map.entrySet()){59if(entry.getValue()==1){60 no_list.add(entry.getKey());61 }62 }end=System.currentTimeMillis();65System.out.println(“总共用时:”+(end-begin)+”毫秒”); no_list;68 }69 70 }

posted on

人生的路无需苛求。只要你迈步,路就在你的脚下延伸。

有ListString list1和ListString list2,两个集合各有上万个元素

相关文章:

你感兴趣的文章:

标签云: