2
2
3
3
import com .thealgorithms .devutils .entities .ProcessDetails ;
4
4
import java .util .ArrayList ;
5
+ import java .util .Collection ;
5
6
import java .util .Comparator ;
7
+ import java .util .Iterator ;
6
8
import java .util .List ;
7
9
8
10
/**
@@ -31,13 +33,24 @@ public void scheduleProcesses() {
31
33
int size = processes .size ();
32
34
int time = 0 ;
33
35
int executed = 0 ;
34
- int k = 0 ;
36
+
37
+ Iterator <ProcessDetails > processIterator = processes .iterator ();
38
+
39
+ // This will track the next process to be checked for arrival time
40
+ ProcessDetails nextProcess = null ;
41
+ if (processIterator .hasNext ()) {
42
+ nextProcess = processIterator .next ();
43
+ }
35
44
36
45
while (executed < size ) {
37
- // Load arrived processes into ready queue
38
- while (k < size && processes .get (k ).getArrivalTime () <= time ) {
39
- ready .add (processes .get (k ));
40
- k ++;
46
+ // Load all processes that have arrived by current time
47
+ while (nextProcess != null && nextProcess .getArrivalTime () <= time ) {
48
+ ready .add (nextProcess );
49
+ if (processIterator .hasNext ()) {
50
+ nextProcess = processIterator .next ();
51
+ } else {
52
+ nextProcess = null ;
53
+ }
41
54
}
42
55
43
56
ProcessDetails running = findShortestJob (ready );
@@ -58,7 +71,7 @@ public void scheduleProcesses() {
58
71
* @return returns the process' with the shortest burst time OR NULL if there are no ready
59
72
* processes
60
73
*/
61
- private ProcessDetails findShortestJob (List <ProcessDetails > readyProcesses ) {
74
+ private ProcessDetails findShortestJob (Collection <ProcessDetails > readyProcesses ) {
62
75
return readyProcesses .stream ().min (Comparator .comparingInt (ProcessDetails ::getBurstTime )).orElse (null );
63
76
}
64
77
0 commit comments