LinkedHashSet mantains insertion order but how? What is internal implementation of LinkedHashSet and data structure behind it?