String[] arr=(String[])ArrayList.toArray(new String[0]);
この方法でうまくいきました。

String[] arr=(String[])ArrayList.toArray(new String[ArrayList.size()]);
しなくて良いのかな?とか思いますけど。
配列0で初期化してるのにそれ以上に大量のデータを入れてオーバーフローとか
しないんですか?