Ist das jetzt eine Arraylist oder eine LinkedList?
Eigentlich wäre beides ineffizient. Du solltest dich unbedingt mal über die Laufzeit bestimmter AUfrufe informierne, zumindest wenn du möchtest, dass es schnell geht.
Wenn du aus einer Arrayliste ein Element löschst, muss eine neue mit der neuen Größe erstellt werden und die alte bis auf das eine Element hineinkopiert werden. Das ist langsam.
Wenn du aus einer LinkedList das i-te Element löschen willst, wird Java vermutlich das i-te Element raussuchen müssen, was wieder lineare Laufzeit hat. Mit Iteratoren könntest du direkt auf das Element zugreifen, und es in konstanter Zeit löschen.
List.size() könnte auch länger brauchen, als man glaubt. Zwar könnte man Größe der Liste zwischenspeichern und immer erhöhen/erniedrigen, wenn Elemente eingefügt/gelöscht werden. Aber LinkedLists haben als Datenstruktur auch die nette Eigenschaft, dass man, wenn sie anhand von verschiedenen Iteratoren zusammenstückeln kann, was ansich auch in konstanter Zeit funktioniert. Nur hat man dann im Allgemeinen keine Ahnung mehr, wie groß die neue Liste ist, weswegen eine von beiden Operationen lineare Laufzeit hat.