Se集合常见问题

1.特性 不允许元素重复且无序,允许元素为null基于HashMap 实现 (key 即是值,value 是一个固定全局常量 Object PRESENT =

1.特性

  • 不允许元素重复且无序,
  • 允许元素为null
  • 基于HashMap 实现 (key 即是值,value 是一个固定全局常量 Object PRESENT = new Object();)
  • 线程不安全
  • 常用实现有 HashSet、LinkedHashSet 和 TreeSet。

2.HashSet

  • 继承与AbstractSet 实现Set接口
  • 不保证迭代顺序(无序)
  • 允许元素为null
  • 底层实际上是一个HashMap实例
  • 非同步
  • 初始容量非常影响迭代性能**HashMap实例 **

3.TreeSet

  • 通过 TreeMap 实现
  • 可以实现排序功能(有序)
  • 线程不安全
  • 添加元素到集合时按照比较规则将其插入合适的位置,保证插入后的集合仍然有序。
    • 可以自定义 Comparator 对象比较规则。

4.LinkedHashSet

  • 继承与 HashSet
  • 有序的
  • 允许为null
  • 底层实际上是一个HashMap+双向链表实例(其实就是LinkedHashMap)…
  • 线程不安全
  • 性能比HashSet差,因为要维护一个双向链表

5.HashSet扩容

HashSet扩容(元素个数>阈值16 乘以 加载因子0.75)

6.HashSet如何判断元素是否相同

  • 对于包装类型直接按值比较。
  • 对于引用类型先比较 hashCode 是否相同,不同则代表不是同一个对象,
  • 相同则继续比较 equals,都相同才是同一个对象。