Это очень сильно зависит от деталей реализации.
HashSet использует массив в качестве основного хранилища, которое по умолчанию пытается увеличить, когда коллекция заполнена на 75%.Это означает, что произойдет сбой, если вы попытаетесь добавить более 750 000 000 записей.(Невозможно увеличить массив с 2 ^ 30 до 2 ^ 31 записей)
Увеличение коэффициента загрузки увеличивает максимальный размер коллекции.Например, коэффициент загрузки 10 позволяет 10 миллиардов элементов.(Стоит отметить, что HashSet является относительно неэффективным после 100 миллионов элементов, поскольку распределение 32-битного хэш-кода начинает выглядеть менее случайным, а число коллизий увеличивается)
Вектор удваивает свою емкость и начинается с10. Это означает, что он не сможет вырасти выше 1,34 миллиарда.Изменение начального размера до 2 ^ n-1 дает вам немного больше свободного пространства.
Кстати: используйте ArrayList вместо Vector, если можете.
LinkedList не имеет предела inherant и может вырасти за пределы2,1 млрд.В этот момент size () может вернуть Integer.MAX_VALUE, однако некоторые функции, такие как toArray, не будут работать, поскольку он не сможет поместить все объекты в массив, вместо этого он даст вам первый Integer.MAX_VALUE, а не вызовет исключение.
Как отмечает @Joachim Sauer, текущий OpenJDK может вернуть неверный результат для размеров выше Integer.MAX_VALUE.например, это может быть отрицательное число.