Fill ArrayList of String with empty String to maintain order of elements
Have you considered that ArrayList could be a little overkill?  If your list will always be a defined length, you could use a String[] to hold your data.  That way, the default value is always null and you don't have to worry about IndexOutOfBoundsExceptions.

You can still use constructs like for(String value : csvRow) to access your data, and if you need the finesse of the Collections API, you can always use Arrays.asList(csvRow).

If you're looking for NullPointerException protection, you can run Arrays.fill(csvRow, "") first to ensure that all indexes return an empty string unless otherwise populated.

String tmp = "placeholder";

String[] csvRow = new String[14];
Arrays.fill(csvRow, "");
// Add values for C1-C5 (dummy data)
for(int i=0;i&lt;5;i++) csvRow[i] = tmp;

// Add in optional values
List&lt;String&gt; optionalValues = Collections.emptyList();
if(!optionalValues.isEmpty()) {
    int i = 6;
    for(Iterator&lt;String&gt; ovI = optionalValues.iterator();
            ovI.hasNext() &amp;&amp; i &lt; csvRow.length;i++){
        csvRow[i] = ovI.next();
    }
}
// Add C12 if not already present
if("".equals(csvRow[11])) csvRow[11] = tmp;