首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

多线程找到两个list之间不同的元素

2013-07-11 
多线程找出两个list之间不同的元素突然之间,给自已想到了一题,找出两个list之间的不同元素。尝试了用list循

多线程找出两个list之间不同的元素
突然之间,给自已想到了一题,找出两个list之间的不同元素。
尝试了用list循环 或 用hashSet 实现,但效率都太低了点。
如是尝试了一下用多线程去实验一下,效率大大提升 。。

import java.util.ArrayList;import java.util.List;/** * @author gah * * 2013-7-3 */public class CompareListThread {private List minList, maxList , retList;public CompareListThread(List list1, List list2) {if(list1.size() > list2.size()) {maxList = list1;minList = list2;} else {maxList = list2;minList = list1;}retList = new ArrayList();}private int getInterval() {return maxList.size()/10;}public void execute() throws Exception{int start, t;        start = t = getInterval();ACT act = null;List<ACT> list = new ArrayList<ACT>();while(start < maxList.size()) {act = new ACT(start - t,start);start += t;act.start();list.add(act);}act = new ACT(start-t, maxList.size());act.start();list.add(act);for(ACT a:list) {a.join();retList.addAll(a.getResult());}}public List getResult() {return retList;}class ACT extends Thread {private List  rList;private int s, e;public ACT(int s, int e) {this.s = s; this.e  = e;rList = new ArrayList();}@Overridepublic void run() {Object o = null;for(;s < e; s++) {o = maxList.get(s);for(int i = 0,j=minList.size(); i < j; i++) {if(o == minList.get(i)) {o = null;break;}}if(null != o) {rList.add(o);}}}public List getResult() {return rList;}}}


private static List compareSet(List list1, List list2) {long a = System.currentTimeMillis();List retList = new ArrayList();List minList;Set set = null;if(list1.size() > list2.size()) {set = new HashSet(list1);minList = list2;} else {set = new HashSet(list2);minList = list1;}set.removeAll(minList);System.out.println("compare2 method take time:" + (System.currentTimeMillis() - a));Iterator iter = set.iterator();while(iter.hasNext()) {retList.add(iter.next());}return retList;}


private static List compareList(List list1, List list2) {long a = System.currentTimeMillis();List retList = new ArrayList();List minList = list1 , maxList = list2;if(list1.size() > list2.size()) {maxList = list1;minList = list2;}for(int i = 0, count = maxList.size(); i < count; i++) {if(!minList.contains(maxList.get(i))) {retList.add(maxList.get(i));}}System.out.println("compare method take time:" + (System.currentTimeMillis() - a));return retList;}

热点排行