codice:
for (int i = 0; i < size; i++) {
sb.append (get(i) +(i != size -1 ? "-" : ""));
}
Il risultato di avere il trattino tra ogni elemento della lista lo genera questo codice non sb.toString.
Il fatto che nel metodo toString venga usato un oggetto di tipo StringBuilder (e direi anche meno male) viene fatto perchè in java le stringhe sono oggetti immutabili quindi effettuando una concatenazione tra 2 stringhe ("-" + elemento lista) ne nascerebbe una nuova con ovviamente spreco di memoria (oltre al fatto che se usi quel codice con una lista di 10000 risultati avresti molti problemi di performance). Spero di aver inteso il tuo dubbio.