本章属于持续学习、长期更修。
HashSet
特性
- HashSet不允许重复数据。
- HashSet不允许null,因为null也是可以重复的。
- HashSet不保证数据的插入顺序。
- HashSet不是线程安全的,如果想使用线程的安全的HashSet可以通过
Collections.synchronizedSet
来获取线程安全的HashSet。也可以使用CopyOnWriteArraySet
。但是性能会有很大的损失。 - HashSet迭代器方法是快速失败的。因此,在创建迭代器之后对集合进行任何结构修改都会抛出ConcurrentModificationException。
- HashSet支持泛型,这是在运行时避免ClassCastException的推荐方法。
- HashSet使用
HashMap
存储元素,因此对象应该提供hashCode()和equals()方法的良好实现,以避免不必要的结果。