0

我在采访中被问到这个问题“如何使用 Hashset 创建 Linkedhashset?” 有人知道答案吗?

4

1 回答 1

2

LinkedHashSet类有一个public LinkedHashSet(Collection<? extends E> c)构造函数,所以你可以这样做

HashSet<Foo> hs = new HashSet<Foo>();
// add items...
LinkedHashSet<Foo> lhs = new LinkedHashSet<Foo>(hs);

获取与 . 内容相同的 LinkedHashSet 实例hs。请注意,不能保证 from 中的项目按照它们插入的顺序插入hs,因为该信息从未保存过。lhshshs

没有办法制作“行为类似于 LinkedHashSet 的 HashSet”,即HashSet行为类似于实例的运行时类的LinkedHashSet实例。但是,你可以做

HashSet<Foo> hs = new LinkedHashSet<Foo>();

这将为您提供一个外部世界将其视为普通HashSet但在LinkedHashSet内部使用实现的实例。不过,我不明白为什么你会想要这样做——你只会获得一堆开销并且没有额外的功能,因为声明的类型是HashSet. 您首先要使用 LinkedHashSet 的原因是为了保证可预测的迭代顺序,但您仍然无法假设hs- 例如,您可以随时分配hs = new HashSet<Foo>()

于 2013-07-28T13:51:38.190 回答