使用可迭代初始化集
我想用一个可迭代的在Java中初始化一个集合实现(HashSet)。但是,HashSet 的构造函数不接受可迭代对象,而只接受集合类型对象。
有没有办法从可迭代转换为集合的某个子类型。
我想用一个可迭代的在Java中初始化一个集合实现(HashSet)。但是,HashSet 的构造函数不接受可迭代对象,而只接受集合类型对象。
有没有办法从可迭代转换为集合的某个子类型。
你可以使用番石榴。
Set<T> set = Sets.newHashSet(iterable);
或者让它读起来像一个静态的句子,
import static com.google.common.collect.Sets.*;
Set<T> set = newHashSet(iterable);
HashSet
构造函数依赖于比提供的内容更多的内容:它希望预先了解集合的,以便以最佳方式构造底层 。如果你有一个真正的,朴素的 ,它不知道它的大小,那么你必须通过以许多明显的方式将其变成常规来实现前期。Iterable
size
HashMap
Iterable
Iterable
Collection
另一方面,如果您有一个已经知道其大小的更丰富的对象,那么创建一个将您包装到集合中的极简适配器类将是值得的,除了将调用转发到 之外,还实现了。Iterable
size
iterator
public class IterableCollection<T> implements Collection<T>
{
private final Iterable<T> iterable;
public IterableCollection(Iterable<T> it) { this.iterable = it; }
@Override public Iterator<T> iterator() { return iterable.iterator(); }
@Override public int size() { return ... custom code to determine size ... }
@Override .... all others ... { throw new UnsupportedOperationException(); }
}