I think that HashSet is a Java-specific term. It is just a hash table in which there is no data to store, just the key itself (and probably a cash of the hashcode of that key), correct?
Yes. And in Java HashSet implemented on top of HashMap (:
I think a more general solution would be to get the planner and executor to run the in-list query using the Hash Join, the same way it runs the in-VALUES one.
Have additional plan nodes big overhead?
I was impressed at how well the JSON and hstore worked, you might want to look at how they do it. It is must be using an internal hash table of some sort.
JSONB and HSTORE keep sorted pairs and use binary search.