При удалении элемента из ArrayList все элементы после удаленного приходится сдвигать к началу. Это может привести к значительной задержке при большом размере ArrayList.
Если в вашем списке часто выполняются операции добавления и удаления элементов, лучше воспользоваться коллекцией LinkedList. В элементах LinkedList хранятся адреса двух соседних элементов: предыдущего и следующего. Допустим, LinkedList состоит из трех элементов "Hello", "Good" и "Morning", хранящихся по адресам 111, 122 и 133 соответственно. На следующей диаграмме показано, как выглядит реализация LinkedList.