Suppose I need to store 1000 objects in Hashset, is it better that I have 1000 buckets containing each object( by generating unique value for hashcode for each object) or have 10 buckets roughly containing 100 objects?
1 advantage of having unique bucket is that I can save execution cycle on calling equals() method?
Why is it important to have set number of buckets and distribute the objects amoung them as evenly as possible?
What should be the ideal object to bucket ratio?
A
HashSetshould be able to determine membership in O(1) time on average. From the documentation:The algorithm a
Hashsetuses to achieve this is to retrieve the hash code for the object and use this to find the correct bucket. Then it iterates over all the items in the bucket until it finds one that is equal. If the number of items in the bucket is greater than O(1) then lookup will take longer than O(1) time.In the worst case – if all items hash to the same bucket – it will take O(n) time to determine if an object is in the set.
There is a space-time tradeoff here. Increasing the number of buckets decreases the chance of collisions. However it also increases memory requirements. The hash set has two parameters
initialCapacityandloadFactorthat allow you to adjust how many buckets theHashSetshould create. The default load factor is 0.75 and this is fine for most purposes, but if you have special requirements you can choose another value.More information about these parameters can be found in the documentation for
HashMap: