List元素筛选和排序

zhuyouyong 2012-12-25 02:03:52
需求如下:
一个装有若干worker对象的List如
workerList [worker1,worker2,worker3,worker4,worker5,workeer6]

将所有的worker安排工作时间表如:

周一:worker1,worker2,worker3,worker4 workerListMon
周二: worker1,worker3,worker4,worker5 workerListTues
周三: worker1,worker2,worker4,worker5 workerListWed
周四: worker3,worker4,worker5,worker6 workerListThurs
周五:worker1,worker2,worker3,worker6 workerListFri

想将worker按照工作天数由多到少进行排序,并且能够得出工作天数最长的worker的工作日。

个人想法是通过遍历workerList中的每个worker,再到每个工作日list中验证元素是否存在,若存在则计数加1,不知这种方式执行效率是否有问题,而且如何确定workder的工作日是哪几天?


...全文
261 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huage 2012-12-25
  • 打赏
  • 举报
回复
class  DayWorker{
	private Integer  workerMun;
	private String[] day ;
	public Integer getWorkerMun() {
		return workerMun;
	}
	public void setWorkerMun(Integer workerMun) {
		this.workerMun = workerMun;
	}
	public String[] getDay() {
		return day;
	}
	public void setDay(String[] day) {
		this.day = day;
	}

}
public class Test {
	public static Map< String, DayWorker> addMap(Map< String, DayWorker> map, List<String> workerList , int day){
		String [] dayStr ={"workerListMon" ,"workerListTues","workerListWed","workerListThurs","workerListFri"} ;
		for (String key : workerList) {

			if(!map.containsKey(key)){ 
				DayWorker worker = new DayWorker() ;
				worker.setWorkerMun(1);
				String [] dayName = new String[5]  ;
				dayName[0] =dayStr[day-1] ;
				worker.setDay(dayName) ;
				map.put(key, worker) ;
			}else{
				DayWorker worker = map.get(key) ;
				worker.setWorkerMun(worker.getWorkerMun()+1) ;
				String[]  dayName = worker.getDay() ;
				dayName[day-1] = dayStr[day-1] ;
				worker.setDay(dayName) ;
			}

		}
		return map ;
	}
	public static void main(String[] args) throws  Exception {
		//初始数据
		List<String> workerListMon = new ArrayList<String>();
		List<String> workerListTues = new ArrayList<String>();
		List<String> workerListWed = new ArrayList<String>();
		List<String> workerListThurs = new ArrayList<String>();
		List<String> workerListFri = new ArrayList<String>();
		for (int i = 1; i < 7; i++) {
			String s  = "worker"+ i ;
			if(i == 1 || i == 2 || i== 3|| i == 4)
				workerListMon.add(s) ;
			if(i == 1 || i == 4 || i== 3|| i == 5)
				workerListTues.add(s) ;
			if(i == 1 || i == 2 || i== 5|| i == 4)
				workerListWed.add(s) ;
			if(i == 6 || i == 3 || i== 5|| i == 4)
				workerListThurs.add(s) ;
			if(i == 1 || i == 2 || i== 3|| i == 6)
				workerListFri.add(s) ;
		}
		Map< String, DayWorker> map = new HashMap<String, DayWorker>() ;
		map =  addMap(map, workerListMon, 1) ;
		map =  addMap(map, workerListTues, 2) ;
		map =  addMap(map, workerListWed, 3) ;
		map =  addMap(map, workerListThurs, 4) ;
		map =  addMap(map, workerListFri, 5) ;
		for (String key : map.keySet()) {
			System.out.println(key +"-----"+ map.get(key).getWorkerMun() +"-----"+map.get(key).getDay());
		}
失落夏天 2012-12-25
  • 打赏
  • 举报
回复
引用 3 楼 zhuyouyong 的回复:
引用 2 楼 AA5279AA 的回复:你那样的话复杂度是o2, 在你的那个方法基础上,如果workerListMon这一类的list遍历完某个数据匹配成功后,可以在list中删除,提高运算速度。 另外如果本身就是list的话,那没有其他的办法,如果当初创建的时候可以自己选择的话,建议使用map,map肯定会比list高效的(当然方法需要稍微的改动下) 呵呵楼上的想……
哦 不,那样的话还得遍历List,只要遍历list就很浪费效率。 如果按照Map<String, workerList>的话后面那个workerList建议改成数组 我的意思是Map<workname, dayList> 如果day也有属性的话就改成dayMap
zhuyouyong 2012-12-25
  • 打赏
  • 举报
回复
引用 2 楼 AA5279AA 的回复:
你那样的话复杂度是o2, 在你的那个方法基础上,如果workerListMon这一类的list遍历完某个数据匹配成功后,可以在list中删除,提高运算速度。 另外如果本身就是list的话,那没有其他的办法,如果当初创建的时候可以自己选择的话,建议使用map,map肯定会比list高效的(当然方法需要稍微的改动下)
呵呵楼上的想法是不是这样 Map<String, workerList>//创建一个map用星期几做key
失落夏天 2012-12-25
  • 打赏
  • 举报
回复
你那样的话复杂度是o2, 在你的那个方法基础上,如果workerListMon这一类的list遍历完某个数据匹配成功后,可以在list中删除,提高运算速度。 另外如果本身就是list的话,那没有其他的办法,如果当初创建的时候可以自己选择的话,建议使用map,map肯定会比list高效的(当然方法需要稍微的改动下)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧