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