The general structure of a basic for statement is:
for ( ForInit ; Expression ; ForUpdate ) Statement
ForInit is the initializer. It is run first to set up variables etc.
Expression is a boolean condition to check to see if Statement should be run
Statement is the block of code to be run if Expression is true
ForUpdate is run after the Statement to e.g. update variables as necessary
After ForUpdate has been run, Expression is evaluated again. If it is still true, Statement is executed again, then ForUpdate; repeat this until Expression is false.
You can restructure this as a while loop as follows:
ForInit;
while (Expression) {
Statement;
ForUpdate;
}
In order to apply this pattern to a "real" for loop, just substitute your blocks as described above.
For your example above:
ForInit => int i = 0
Expression => i < 5
ForUpdate => i++
Statement => list [i] = i + 2;
Putting it together:
int i = 0;
while (i < 5) {
list[i] = i + 2;
i++;
}