深入浅出HashSet

本章属于持续学习、长期更修。

HashSet

##

特性

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

源码分析