대단히 구현 세부 사항에 따라 다릅니다.
HashSet은 컬렉션이 75 % 찼을 때 기본적으로 확장을 시도하는 기본 저장소로 배열을 사용합니다. 즉, 약 750,000,000 개 이상의 항목을 추가하려고하면 오류가 발생합니다. (배열을 2^30에서 2^31까지 증가시킬 수 없음)
로드 계수를 늘리면 컬렉션의 최대 크기가 증가합니다. 예 : 로드 계수 10은 100 억 개의 요소를 허용합니다. (HashSet은 32 비트 해시 코드의 배포가 덜 무작위로 보이고 충돌 횟수가 증가하기 때문에 1 억 개 요소가 상대적으로 비효율적이지 않음을 알리는 것이 중요합니다.
벡터는 용량을 두 배로하고 10에서 시작합니다. 이는 약 13 억 4 천만을 초과하여 성장하지 못한다는 것을 의미합니다. 초기 크기를 2^n-1로 변경하면 헤드 룸이 약간 더 넓어집니다.
BTW : 가능한 경우 Vector 대신 ArrayList를 사용하십시오.
LinkedList에는 상속 제한이 없으며 21 억을 초과하여 커질 수 있습니다. 이 시점에서 size()는 Integer.MAX_VALUE를 반환 할 수 있지만 toArray와 같은 일부 함수는 모든 객체를 배열에 넣을 수 없으므로 실패합니다. 대신 예외를 throw하는 대신 Integer.MAX_VALUE를 처음 제공합니다.
@Joachim Sauer가 지적했듯이 현재 OpenJDK는 Integer.MAX_VALUE 이상의 크기에 대해 잘못된 결과를 반환 할 수 있습니다. 예 : 음수 일 수 있습니다.
'HashMap'은 _first_ 검색을 위해 배열을 사용합니다. 그러나 키 충돌이 발생하면 링크 된 목록에 저장됩니다. 따라서'HashMap'은'Integer.MAX_VALUE' 요소 이상을 예측할 수없는 방식으로 포함 할 수 있습니다. –
LinkedList의 경우 실제로 get (int) 함수는 정수를 받아들입니다. 즉,이 함수를 사용하여 요소를 검색 할 수는 없습니다. 어쨌든 LinkedList가 Integer.MAX_VALUE 이상으로 예상대로 동작하지 않을 것입니다. – Thirler
HashMap의 한계는로드 팩터 * 10 억입니다. 이 시점 이후에는 기본 배열을 늘릴 수 없습니다. Vector는 Integer.MAX_VALUE까지 커지지 않습니다. 초기 용량으로이 크기의 벡터를 만들어야합니다. (있을 법하지 않음)'size()'문서는 이보다 더 큰 크기에 대해 Integer.MAX_VALUE가 반환되므로 LinkedList의 size()가 잘못되지 않습니다. –