I'm in a situation where I'd like to use a dictionary where each bucket should have at max 1 value. If I'm inserting a KV pair into the dictionary and there's a collision, it should resize recursively until there are no collisions.
Insertion speed and memory occupied by the dictionary don't matter (within reason). The dictionary will be loaded one time upon startup of my app, and then never written to again.
Read speed should be very fast, and consistently fast. This is why I'd like to avoid linear probing if possible.
Is this possible? Am I using the wrong data structure entirely? Would I be better off implementing a dictionary with the properties I want myself?