From e1aa0a20ce136a94603e11d66f5d816373992d61 Mon Sep 17 00:00:00 2001 From: oblonski Date: Mon, 28 Sep 2015 09:51:34 +0200 Subject: [PATCH] optimize job removal --- .../solution/route/activity/TourActivities.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java index 5217a85b..e7eba81e 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java @@ -17,6 +17,7 @@ package jsprit.core.problem.solution.route.activity; import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; import java.util.*; @@ -127,12 +128,17 @@ public class TourActivities { jobRemoved = jobs.remove(job); } boolean activityRemoved = false; - List acts = new ArrayList(tourActivities); - for (TourActivity c : acts) { + Iterator iterator = tourActivities.iterator(); + while(iterator.hasNext()){ + TourActivity c = iterator.next(); if (c instanceof JobActivity) { - if (job.equals(((JobActivity) c).getJob())) { - tourActivities.remove(c); + Job underlyingJob = ((JobActivity) c).getJob(); + if (job.equals(underlyingJob)) { + iterator.remove(); activityRemoved = true; + if(underlyingJob instanceof Service){ + break; + } } } }