HashSet 类注释
这个类实现了Set接口,由一个哈希表(实际上是一个HashMap实例)支持。它不保证集合的迭代顺序;特别是,它不能保证订单在一段时间内保持不变。此类允许使用null元素。
这个类为基本操作(添加、删除、包含和大小)提供了恒定的时间性能,假设哈希函数将元素正确地分散在存储桶中。
在此集合上迭代需要与HashSet实例的大小(元素数量)加上支持HashMap实例的“容量”(存储桶数量)之和成比例的时间。
因此,如果迭代性能很重要,那么不要将初始容量设置得太高(或负载系数设置得太低),这一点非常重要。
请注意,此实现不是同步的。如果多个线程同时访问一个哈希集,并且至少有一个线程修改了该集,则必须对其进行外部同步。这通常是通过对一些自然封装集合的对象进行同步来实现的。如果不存在这样的对象,则应使用Collections“包装”集合。synchronizedSet方法。最好在创建时执行此操作,以防止意外地对集合进行不同步的访问:
设置s=集合。synchronizedSet(new HashSet(…));
此类迭代器方法返回的迭代器是快速失效的:如果在迭代器创建后的任何时候,以除迭代器自己的remove方法之外的任何方式修改集合,则迭代器将抛出ConcurrentModificationException。因此,面对并发修改,迭代器会迅速而干净地失败,而不是冒着在未来不确定的时间出现任意、不确定行为的风险。
请注意,迭代器的快速失效行为是无法保证的,因为一般来说,在存在不同步的并发