Поскольку 200k + 200k > 200k + 1
, не означает ли это, что если мы применим вышеупомянутое утверждение, производительность 1 сегмента больше, чем производительность 200k сегментов?
Да , при итерации по всем элементам в HashSet тот факт, что они распределены по нескольким сегментам, плох.
Когда говорят, что итерация линейна в сумме количества записей иколичество сегментов, они означают, что итерация находится в O (n + m) , где n - это количество сегментов, а m - количество записей.Константы не раскрываются.Это может быть, например, случай, когда это занимает 0,0001 * n + m , т. Е. Что влияние количества ведер действительно очень мало по сравнению с воздействиемколичество элементов.
(Кстати, существует другая структура данных, называемая LinkedHashSet
, с характеристиками, аналогичными HashSet, но с временем итерации, пропорциональным только количеству элементов.)