The collisions affecting complexity is an interesting point.
But how big is the effect in reality?
If your hashes are 32 bits and have a good distribution, wouldn't you need somewhere in the order of 2^32 elements to get a lot of collisions and noticeably affect time complexity? Does it really already happen at 2% of 2^32 as used?
Meanwhile many array implementations are indexed with 32 bit integers, so they have a hard limit of 2^32 items. Easy to solve, but suggests the limit is rarely reached.
So while theoretically interesting, wouldn't it be safe in practise to consider O(1) complexity for 99.99% of cases?