>>28
1 data.size()はループの度に評価される。
2 data.removeFirst()でループの度に要素数は減っていく。

なんで、半分のところでループ条件にマッチしてしまう。

二つ目のforループの前に
int dataSize = data.size();
とでもして、forの条件を「i < dataSize」に変えてみ。