目录
查询 iterator,size,isEmpty,contains
简介
/**
* 这个类实现Set接口,由一个散列表(实际上是一个HashMap实例)支持。
* 它不保证集合的迭代顺序;特别是,它不能保证顺序保持不变。该类允许null元素。
*
* <p>这个类为基本操作(add,remove,contains,size)提供了常数时间性能,假设散列函数正确地将元素分散到各个桶中。
* 遍历这个集合需要的时间与HashSet实例的大小(元素的数量) 加上 支持HashMap实例的“容量”(桶的数量)的总和成比例。
* 因此,如果迭代性能很重要,那么不要将初始容量设置得太高(或负载因子太低)是非常重要的。
*
* <p>注意,这个实现不是同步的。如果多个线程同时访问一个散列集,
* 并且至少有一个线程修改该散列集,则必须在外部对其进行同步。
* 这通常是通过对一些自然封装了集合的对象进行同步来实现的。
*
* 如果不存在这样的对象,则应该使用Collections.synchronizedSet方法来保证它。
* 这最好在创建时完成,以防止意外的不同步的访问set的行为:
*
* <pre>
* Set s = Collections.synchronizedSet(new HashSet(...));</pre>
*
* <p>这个类的迭代器方法返回的迭代器是快速失效的:如果在迭代器创建后的任何时候修改集合,
* 除了通过迭代器自己的删除方法之外,任何方式都可以,迭代器抛出ConcurrentModificationException。
* 因此,在面对并发修改时,迭代器会快速而干净地失败,而不是在将来某个不确定的时间冒任意的、不确定的行为的风险。
*
* <p>注意,不能保证迭代器的快速故障行为,因为通常来说,在存在非同步并发修改的情况下,不可能做出任何严格的保证。
* 故障快速迭代器在最大努力的基础上抛出ConcurrentModificationException。
* 因此,编写一个依赖于这个异常的正确性的程序是错误的:迭代器的快速故障行为应该只用于检测bug。
*
* @param <E> the type of elements maintained by this set
*
* @