我在采访中被问到这个问题“如何使用Hashset创建Linkedhashset?”有谁知道答案?
答案 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>()
例如,任何时候。