Почему выбрана именно такая реализация?
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
В проектировании еще не достаточно силен, поэтому начал понемногу смотреть реализацию сложных механизмов Java. И естественно спрашивать советы у более опытных товарищей.

Ниже приведу свой вариант и свои мысли, интересует code review и пояснения почему было сделано именно так, а не иначе.
public String toString() {
//Экономим на создании итератора, когда он не нужен, да и читаемость выше, на мой взгляд
if(isEmpty())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
//Не понимаю, почему используется конструкция for(;;), а не хотя бы while(i.hasNext())
for(E e: this)
{
sb.append(e == this ? "(this Collection)" : e);
sb.append(", ");
}
return sb.append(']').toString();