当前位置: 首页 > wzjs >正文

做网站网页的专业营销型网站建设总结

做网站网页的专业,营销型网站建设总结,免费自制壁纸app,深圳西丽网站建设Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景 一、Set系列集合概述 1. 核心特点 无序性:存取顺序不一致(LinkedHashSet除外)。唯一性:元素不重复。无索引:无法通过索引直接访…

Java Set系列集合详解:HashSet、LinkedHashSet、TreeSet底层原理与使用场景


一、Set系列集合概述

1. 核心特点

  • 无序性:存取顺序不一致(LinkedHashSet除外)。
  • 唯一性:元素不重复。
  • 无索引:无法通过索引直接访问元素,不能使用普通for循环遍历。

2. 常见实现类

实现类特点底层数据结构
HashSet无序、唯一、无索引哈希表(数组+链表/红黑树)
LinkedHashSet有序(存取顺序一致)、唯一哈希表+双向链表
TreeSet可排序(自然或自定义)、唯一红黑树

二、Set接口常用方法

Set继承自Collection接口,常用方法如下:

方法说明
boolean add(E e)添加元素,成功返回true
void clear()清空集合
boolean remove(E e)删除指定元素
`boolean contains(Object)判断是否包含元素
int size()返回集合元素个数

三、各实现类详解

1. HashSet

底层原理
  • JDK8前:数组 + 链表。
  • JDK8后:数组 + 链表 + 红黑树(链表长度≥8且数组长度≥64时触发转换)。
  • 哈希值计算:通过重写hashCode()equals()保证元素唯一性。
扩容机制
  • 默认初始容量:16。
  • 加载因子:0.75(当元素数量达到容量的75%时触发扩容)。
代码示例
Set<String> set = new HashSet<>();
set.add("A");
set.add("A"); // 添加失败
System.out.println(set); // 输出无序,如 [A, B]

2. LinkedHashSet

核心特点
  • 继承自HashSet,通过双向链表维护插入顺序。
  • 性能略低于HashSet,但遍历效率更高。
代码示例
LinkedHashSet<String> linkedSet = new LinkedHashSet<>();
linkedSet.add("B");
linkedSet.add("A");
System.out.println(linkedSet); // 输出顺序固定为 [B, A]

3. TreeSet

排序规则
  • 自然排序:元素需实现Comparable接口,重写compareTo()
  • 比较器排序:创建TreeSet时传入Comparator自定义规则。
代码示例
// 自然排序(按年龄升序)
TreeSet<Student> treeSet = new TreeSet<>();
treeSet.add(new Student("Tom", 20));
treeSet.add(new Student("Alice", 18));
// 输出按年龄排序:Alice(18) → Tom(20)

四、补充知识点

1. 线程安全性

  • HashSetTreeSetLinkedHashSet非线程安全
  • 解决方案:使用Collections.synchronizedSet()包装。
Set<String> syncSet = Collections.synchronizedSet(new HashSet<>());

2. 哈希冲突解决策略

  • 链地址法(HashSet采用):冲突元素以链表形式存储。
  • 开放寻址法:线性探测或二次探测。

3. 红黑树简介

  • 一种自平衡二叉查找树,保证插入、删除、查找的时间复杂度为O(log n)
  • 特性:节点颜色交替、根节点为黑、叶子节点为黑、任意路径黑节点数相同。

4. 性能对比

操作HashSetLinkedHashSetTreeSet
插入O(1)O(1)O(log n)
删除O(1)O(1)O(log n)
查询O(1)O(1)O(log n)
有序性插入顺序自然/自定义

五、应用场景总结

场景推荐集合
去重且无需顺序HashSet
去重且保留插入顺序LinkedHashSet
去重且需排序TreeSet
高频查询HashSet
需要线程安全Collections.synchronizedSet()

六、常见面试题

  1. HashSet如何保证元素唯一?
    通过hashCode()equals()方法:先比较哈希值,再通过equals判断内容是否相同。

  2. TreeSet两种排序方式如何选择?

    • 默认使用自然排序(需实现Comparable)。
    • 若类无法修改或需多规则排序,使用Comparator
  3. HashSet和HashMap的关系?
    HashSet底层基于HashMap实现,元素存储为HashMap的键(值固定为PRESENT占位对象)。


关注博主,获取更多Java集合框架深度解析!

http://www.dtcms.com/wzjs/375796.html

相关文章:

  • 大学生课程设计网站百度推广客服人工电话多少
  • 网站建设与管理结课论文广告推广方式
  • 竟标网站源码百度网盘登录入口网页版
  • 软件制作器手机版下载济南百度seo
  • 电影网站膜拜百度快照如何优化
  • 抖音小程序推广计划怎么开通廊坊首页霸屏优化
  • 如何自己做加盟网站爱站网seo
  • 为什么要做网站优化灰色关键词排名方法
  • 商务网站创建方案bing搜索引擎
  • 伴奏网站防盗是怎么做的免费推广平台
  • 贵州最好的网站建设推广公司百度收录批量查询工具
  • 建设工程造价员网站希爱力的作用与功效
  • 行业门户网站解决方案百度广告怎么做
  • 值得信赖的深圳app开发公司北京seo方法
  • 开发商城网站开发永久免费域名申请
  • 网站建设客户分析调查问卷最近新闻摘抄
  • 浙江建设信息港证书查询seo推广代运营
  • 品牌网站建设的好的案例广告主资源哪里找
  • JSP新闻网站开发公关公司是干嘛的
  • 公司网址怎么写举例适合seo优化的网站
  • 徐州网站开发价位网址推荐
  • 网站怎么做动态图片软件外包公司排行
  • 网站后台无法上传照片市场监督管理局职责
  • 网站建设合同纠纷 延期可以终止合同吗免费域名注册平台
  • 汽车app网站建设网络营销的概念及特征
  • 哪个网站做的简历比较好国产免费crm系统有哪些在线
  • wordpress 全站备份电商网站规划
  • 佳木斯建设工程交易中心网站外贸平台app
  • 江苏省建设主管部门网站百度识图网页版在线使用
  • 合阳县建设局网站海外推广渠道都有哪些