Это называется амортизированным O(1)
, что означает в течение некоторого периода времени, когда есть много записей, и вы часто делаете get
. Вам также, кажется, не хватает понимания O(1)
- это означает, что оно постоянно. Если я добавлю больше записей в HashMap
- время, необходимое для извлечения записи, будет одинаковым, будь то 10 или 10 миллионов записей в этом HashMap
, и с учетом того, что hashCode
реализовано и не выполняется иметь фиктивную реализацию return 1
(это, например, когда записи будут помещены в одно и то же ведро).
Изменение размера действительно происходит в некоторых случаях, но это даже не близко к тому, как ArrayList
делает это. ArrayList
только увеличит внутренний массив, всегда ; HashMap
удвоит внутренние сегменты до определенной точки ( смотрите, когда именно здесь ), после чего преобразует определенный интервал в Tree
, что ускоряет поиск - это было добавлено в Java-8.