第二个(仅使用
HashSet)只是一个巧合。从JavaDocs:
此类实现Set接口,该接口由哈希表(实际上是HashMap实例)支持。它不保证集合的迭代顺序。
特别是,它不能保证顺序会随着时间的推移保持恒定 。此类允许使用null元素。
第三个(
linkedHashSet)设计为:
Set接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashSet的不同之处在于,它维护一个贯穿其所有条目的双向链接列表。此链表定义了迭代顺序,即将元素插入到集合中的顺序(插入顺序)。请注意,如果将元素重新插入到集合中,则插入顺序不会受到影响。(如果在调用s.contains(e)即将返回true时调用s.add(e),则将元素e重新插入到set
s中。)



