Se集合常见问题

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,都相同才是同一个对象。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部