Всегда сомнительно, чтобы пользователи могли делать одно и то же по-разному. Также не элегантно заставлять клиента беспокоиться о том, есть ли последний элемент или нет.
Но, в конце концов, это скорее стиль, и ваш подход можно рассматривать как нормальный. Тем не менее вы предоставляете своим клиентам возможность вызывать «безопасный» метод и в итоге получить исключение времени выполнения. Таким образом, на самом деле есть два разных сценария ошибок.
Одна тонкая вещь, которую определенно нужно изменить: избегайте дублирования кода! Метод, который делает try / catch для выброса этого исключения, должен просто вызвать «безопасный» метод!
Сказав все это, я лично предложил бы только один метод, который выдает какое-то исключение во время выполнения. Стандартные коллекции Java используют непроверенные исключения, как и вы.
Цитируя Роберта Мартина: «Война между проверенными и непроверенными исключениями окончена, и непроверенная победа». И он написал это более 10 лет назад.