Коротко:
- если об оптимизации (new StringBuffer()).apend("1").apend("2") вместо "1"+"2" не писал только ленивый, то если надо проверить первую букву строки лучше проверить
if ('a' == s.charAt(0)) {...}
чем
if (s.startsWith("a")){...} - интересно, что StringBuffer имеет свой initial capacity ~ 16
и можно оптимизировать так
StringBuffer sb = new StringBuffer(1024); - ArrayList намного быстрее Vector, но это не синхронизированная коллекция.
Initial capacity 10, каждый раз удваивается при увеличении массива сверх capacity. - Всегда лучше использовать буферезированные потоки BufferedOutputStream и BufferedInputStream для увеличения performance.
- При синхронизации очень дорого обходятся средства синхронизации, типа synchronize.