Всегда лучше, чтобы ваш код был менее эффективным, чем дублировался (некоторые постоянные вызовы невелики). По крайней мере, так преподается в моем университете.
Дублирование кода приводит к ошибкам. Поэтому вы предпочитаете, чтобы ваша программа работала правильно, а не немного быстрее.
Если вы хотите предотвратить проверку ограничений: мне приходит в голову то, что вы можете либо принимать естественные исключения как предложенные полигенные смазки, либо создавать абстрактный суперкласс для всех ваших структур данных на основе массивов. Этот абстрактный класс будет иметь защищенный метод swap, который не будет проверять параметры. Это не идеально, но я думаю, что защищенный метод, который не проверяет параметры, лучше, чем публичный метод, который не делает это.