How would you design a data structure that supports insert, delete, and getRandom operations in O(1) time complexity?