如何使用Hashset创建Linkedhashset?

时间:2013-07-27 19:29:01

标签: linkedhashset

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

1 个答案:

答案 0 :(得分:2)

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

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

获取与hs具有相同内容的LinkedHashSet实例。请注意,无法保证hs中的项目按照lhs中插入的相同顺序插入hs,因为hs从未保存过该信息。

无法使“行为类似于LinkedHashSet的HashSet”,即行为类HashSet的行为类似于LinkedHashSet实例的实例。但是,你可以做到

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

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